Scalaステートメントを区切るにはセミコロンを使用する必要がありますか?


9

私はJavaからセミコロンでステートメントを区切るのに慣れているので、当然Scalaコードでもそれを行います。また、1つのステートメントが終了し、別のステートメントが開始する場所が明らかであるため、コードが読みやすいと感じています。しかし、SOにScalaコードを投稿すると、セミコロンを削除するためにコードが編集されることがよくあります。

  1. セミコロンを使用する必要がありますか?「公式」のガイドラインやコーディングスタイルはありますか?
  2. セミコロンが必要な場合はありますが、それ以外の場合はコードがあいまいですか?

5
ハスケルはあなたに何も教えませんでしたか?; P不要な構文を削除します。セミコロンは、同じ行の複数の句/ステートメントを分割するためにのみ使用する必要があります
Jimmy Hoffa

@JimmyHoffa Haskellは、構文は美しく一貫している必要があることを教えてくれました:)。
PetrPudlák2013

2
私はScalaのスニペットを見るたびに私はイライラ理由の最初の部分はある...
ジミー・ホッファ

回答:


9

正式な「正しい」方法はありませんが、ほとんどの開業医は可能な限りセミコロンを省略しています(そのため、多くの人がセミコロンを再帰的に削除しています)。

言語は、ステートメントを終了する必要性をまったく忘れさせようと非常に努力しています。残念ながら、それはしない、非常に、成功しそうセミコロンで様々な複雑な状況、またはかっこの余分なセット、または同様の「ヒント」がある不要な意味を避けるために必要です。このような状況はほとんどまれであり、通常はそれらについて考える必要はありません。これは、防御的に句読点を付けるべきか(それが私の考えです)、問題が発生するまで句読点を付けないこと(それが大多数のユーザーが考えていること)であるかどうかについては、意見が異なります。結局のところ、それはあなたがレネゲードまたはモデル市民として自己を識別するかどうかに関係します。


ありがとう、おそらくそのような複雑な状況の例(またはいくつか:))を挙げてもらえますか?
PetrPudlák2013

3
私はこれを尋ねられるのではないかと心配していました... Scalaでのプログラミングには、驚いたいくつかのものがリストされていますが、現時点では本を持っていないので、詳細を忘れています。それが私が作ろうとしていた点です。これらの例外的な状況を思い出せばそれほど悪くはありませんが、実際には、セミコロンを本当に省略できるかどうか常に確信が持てます。
Kilian Foth 2013

ええと。Scalaでセミコロンがないことで私が傷ついたような状況に一度も遭遇したことはありません。私はそれらを含めません。私は趣味のようなもののためだけにScalaもプログラムしたので、多分それは遅かれ早かれ私に噛まれるでしょう。
KChaloux 2013

4

使用する言語をどれだけ理解したいですか?あなたはその強みを発揮したいですか?Scalaの構文は、明確で簡潔なコードを奨励しています。これを利用してScalaパーサーに問題が発生するいくつかのエッジケースは有益であり(つまり、Scalaに遭遇し、それらを回避する方法を学ぶことにより、Scalaについてさらに学びます)、徐々に修正されます(たとえば、サフィックス表記)。セミコロンを防御的に使用することは、これらの問題について学ぶ必要がないことを意味するかもしれませんが、それは本当に良いことだと思いますか?これらの問題の修正には通常、他の影響がありますが、これらの可能性を見逃してしまいます。

もう1つの考慮事項は、Kilianが認めたように、ほとんどのScala開発者はデフォルトでセミコロンを省略していることです。自分で慣用のScalaを使用しない場合、他の人のコードをどのように扱うと思いますか?あなたはそれが必要以上に難しいと感じるでしょう。

Scalaパーサーのこれらの機能が、クリーンで再利用可能で機能的な(fpの意味で)コードを奨励するために選択されたことを強調することはできません。例として中置演算子構文を取り上げます。開発者が一緒にうまく構成する単純な単一目的のメソッドをクラスに提供することを奨励します。Scalaのコレクションライブラリは、それがいかにうまく機能するかを示しています。これを採用する古典的な訓練を受けたJava開発者は、コードについてより良い習慣と新しい考え方を開発する傾向があります。おなじみのドットやブラケットにこだわる人は見逃します。これは、臆病すぎてセミコロンを放棄できない人にも当てはまると私は思います。


8
-1はい、コンパイラのせいで言語を学習するように「強制」されるので、C ++ではスタイルが崩れました。また、主張の背後にある証拠はほとんどないので、そのような偏った口調での回答にしたいと思います。
Telastyn 2013

(1)@Telastynの発言-この方法で本当に言語を学びたい場合は、猫を飼ってください。彼らはあなたの教育に関心があるので、キーボードの上に座っているのが大好きです。(2)セミコロンの省略は、クリーンなスタイルや奨励とは関係ありません。セミコロンを削除すると、これら順次実行される個別のステートメントであり、おそらく副作用あるという事実が隠されます。セミコロンをそのままにしておくと、そのことに気づき、より機能的なスタイルが優先されます。したがって、決定は純粋に構文的です(たとえば、スタイル、解析など)。
Eli Barzilay

「言語を強制的に学ぶ」ことは成功しないが、「その作者が意図するとおりに言語を使用すること」および「他のほとんどの開発者が使用すること」は重要な参照点である。複数の開発者間で一貫したスタイルを維持すると便利です。この回答と@Killan Fothの回答の両方から、メンテナとほとんどの開発者はセミコロンを無関係であると見なしているようです。
サラ・メッサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.