Sollte ich Semikolons verwenden, um Scala-Anweisungen abzugrenzen?

9

Ich bin es gewohnt, Anweisungen durch ein Semikolon aus Java abzugrenzen, daher mache ich das natürlich auch im Scala-Code. Ich habe auch das Gefühl, dass der Code leichter zu lesen ist, da offensichtlich ist, wo eine Anweisung endet und eine andere beginnt. Aber oft, wenn ich einen Teil des Scala-Codes auf SO poste, wird der Code bearbeitet, nur um Semikolons zu entfernen.

  1. Soll ich Semikolons verwenden oder nicht? Gibt es "offizielle" Richtlinien oder Codierungsstile?
  2. Gibt es Fälle, in denen Semikolons erforderlich sind, andernfalls ist der Code nicht eindeutig?
Petr Pudlák
quelle
5
Hat Haskell dir nichts beigebracht? ; P unnötige Syntax entfernen, Semikolons sollten nur verwendet werden, um mehrere Klauseln / Anweisungen in derselben Zeile aufzubrechen
Jimmy Hoffa
@ JimmyHoffa Haskell hat mir beigebracht, dass die Syntax schön und konsistent sein muss :).
Petr Pudlák
2
Der erste Teil davon ist, warum ich mich ärgere, wenn ich Scala-Schnipsel sehe ...
Jimmy Hoffa

Antworten:

9

Es gibt keinen offiziell "richtigen" Weg, dies zu tun, aber die meisten Praktizierenden lassen Semikolons weg, wo immer sie können (weshalb so viele Menschen Semikolons reflexartig entfernen).

Die Sprache ist sehr bemüht, Sie die Notwendigkeit vergessen zu lassen, Anweisungen überhaupt zu beenden. Leider gelingt dies nicht ganz , so dass es verschiedene komplizierte Situationen gibt, in denen Semikolons oder ein zusätzlicher Satz von Klammern oder ähnliche "Hinweise" erforderlich sind, um unerwünschte Semantik zu vermeiden. Solche Situationen sind fast selten genug, dass man normalerweise nicht darüber nachdenken muss. Es gibt unterschiedliche Meinungen darüber, ob dies bedeutet, dass Sie defensiv interpunktieren sollten (das denke ich) oder niemals interpunktieren sollten, bis Sie in Schwierigkeiten geraten (das denken die meisten Benutzer). Letztendlich hängt es davon ab, ob Sie sich als Abtrünniger oder als vorbildlicher Bürger identifizieren.

Kilian Foth
quelle
Danke, könnten Sie vielleicht ein Beispiel (oder ein paar :) für solch komplizierte Situationen geben?
Petr Pudlák
3
Ich hatte Angst, dass ich danach gefragt würde ... Das Programmieren in Scala listet einige davon auf, die mich überrascht haben, aber ich habe das Buch im Moment nicht bei mir und vergesse die Details. Das ist der Punkt, den ich ansprechen wollte: Wenn ich mich an diese Ausnahmesituationen erinnern könnte, wäre es nicht so schlimm, aber so wie es ist, bin ich mir immer unsicher, ob ich das Semikolon wirklich weglassen kann - also nicht.
Kilian Foth
Huh. Ich bin noch nie in eine Situation geraten, in der mir das Fehlen eines Semikolons in Scala wehgetan hat. Ich schließe sie nie ein . Ich habe Scala auch nur für hobbyähnliche Dinge programmiert, also wird es mich vielleicht früher oder später beißen.
KChaloux
4

Wie viel möchten Sie die Sprachen verstehen, die Sie verwenden? Möchten Sie seine Stärken ausspielen oder nicht? Die Syntax von Scala fördert klaren und präzisen Code. Die wenigen Randfälle, in denen das Ausnutzen dieses Problems zu Problemen für den Scala-Parser führt, sind aufschlussreich (dh Sie lernen mehr über Scala, indem Sie auf sie stoßen und lernen, wie man sie vermeidet) und werden schrittweise behoben (z . B. Suffixnotation ). Die defensive Verwendung des Semikolons kann bedeuten, dass Sie nie etwas über diese Probleme lernen müssen, aber sehen Sie das wirklich als eine gute Sache an? Die Korrekturen für diese Probleme haben normalerweise andere Auswirkungen, aber Sie werden diese Möglichkeiten verpassen.

Eine weitere Überlegung ist, dass, wie Kilian zugibt, die meisten Scala-Entwickler Semikolons standardmäßig weglassen. Wie erwarten Sie, mit dem Code anderer Leute zu arbeiten, wenn Sie es vermeiden, die idiomatische Scala selbst zu verwenden? Sie werden es viel schwieriger finden, als es sein muss.

Ich kann nicht genug betonen, dass diese Funktionen des Scala-Parsers ausgewählt wurden, um sauberen, wiederverwendbaren und funktionalen Code (im fp-Sinne) zu fördern. Nehmen Sie als Beispiel die Syntax des Infix-Operators. Es ermutigt Entwickler, Klassen mit einfachen Einzweckmethoden auszustatten, die sich gut zusammensetzen lassen. Die Sammlungsbibliothek von Scala zeigt, wie schön das funktionieren kann. Klassisch ausgebildete Java-Entwickler, die dies akzeptieren, entwickeln tendenziell bessere Gewohnheiten und neue Denkweisen für ihren Code. Diejenigen, die sich an all die bekannten Punkte und Klammern halten, werden es verpassen. Ich behaupte, dass dies auch für diejenigen gilt, die zu schüchtern sind, um das Semikolon aufzugeben.

itsbruce
quelle
8
-1 Ja, "gezwungen" zu sein, die Sprache aufgrund von Compiler-Fallstricken zu lernen, ist mit C ++ aus der Mode gekommen. Es gibt auch wenig Beweise für die Behauptungen, die ich für eine Antwort mit solch einem voreingenommenen Ton wünschen würde.
Telastyn
(1) Was @Telastyn gesagt hat - wenn Sie wirklich eine Sprache auf diese Weise lernen möchten, holen Sie sich eine Katze, sie lieben es, auf Tastaturen zu sitzen, weil sie sich um Ihre Ausbildung kümmern. (2) Das Weglassen von Semikolons hat nichts mit einem sauberen Stil zu tun oder ihn zu fördern. Wenn Sie Semikolons löschen , wird die Tatsache verborgen, dass es sich um separate Anweisungen handelt, die nacheinander ausgeführt werden und möglicherweise Nebenwirkungen haben. Wenn Sie Semikolons in lassen, werden Sie darauf aufmerksam und bevorzugen daher einen funktionaleren Stil. Die Entscheidung ist daher rein syntaktisch (z. B. Stil, Analyse usw.).
Eli Barzilay
Während "gezwungen, Sprache zu lernen" nicht fliegt, sind "die Sprache so zu verwenden, wie es die Autoren beabsichtigen" und "wie die meisten anderen Entwickler sie verwenden" wichtige Bezugspunkte. Es ist nützlich, einen konsistenten Stil zwischen mehreren Entwicklern beizubehalten. Sowohl aus dieser Antwort als auch aus @ Killan Foths betrachten die Betreuer und die meisten Entwickler das Semikolon anscheinend als irrelevant.
Sarah Messer