我应该使用分号分隔Scala语句吗?


9

我习惯用Java的分号来分隔语句,所以自然也用Scala代码来完成。我还认为代码更易于阅读,因为很明显一个语句在哪里结束而另一个语句在哪里开始。但是很多时候,当我在SO上发布一段Scala代码时,代码被编辑只是为了删除分号。

  1. 是否应该使用分号?是否有任何“官方”准则或编码风格?
  2. 是否有需要分号的情况,否则代码不明确?

5
Haskell没有教你什么吗?; P删除不必要的语法,分号仅应用于分解同一行上的多个子句/语句
Jimmy Hoffa

@JimmyHoffa Haskell告诉我语法必须美观且一致:)。
PetrPudlák'13年

2
第一部分就是为什么每当我看到Scala片段时都会感到恼火……
Jimmy Hoffa 2013年

Answers:


9

尚无正式的“正确”方法,但是大多数从业者会尽可能地省略分号(这就是为什么许多人反身删除分号的原因)。

该语言非常努力,使您完全不需要终止语句。不幸的是,它并没有完全成功,因此在各种复杂的情况下,必须使用分号或一组额外的括号或类似的“提示”来避免不必要的语义。这种情况几乎是很少见的,通常您不必考虑它们。关于这是否意味着您应该防御性地打孔(这是我的想法)还是在遇到麻烦之前绝不打断(这是大多数用户的想法),意见不一。归根结底,这取决于您是否自认是叛徒或模范公民。


谢谢,您也许可以举一个(或几个)复杂情况的例子吗?
PetrPudlák'13年

3
恐怕我会被问到这个问题…… Scala中的编程列出了其中的一些让我感到惊讶的东西,但是目前我没有这本书,我忘记了细节。这是我想说明一点:如果我能记住这些就不会那么糟糕特殊情况,但因为它是,我总觉得我不确定是否能真的省略分号-所以我不知道。
Kilian Foth

嗯 我从来没有遇到过Scala中缺少分号伤害了我的情况。我从不包括它们。不过,我也只为Scala编写了爱好之类的程序,所以也许迟早会咬我。
KChaloux

4

您想了解多少您使用的语言?您是否想发挥自己的优势?Scala的语法鼓励清晰简洁的代码。利用这种方法会导致Scala解析器出现问题的一些极端情况是有启发性的(也就是说,您通过遇到和学习如何避免它们来了解有关Scala的更多信息)并逐渐得到解决(例如,后缀表示法)。防御性地使用分号可能意味着您永远不必了解这些问题,但是您真的认为这是一件好事吗?这些问题的解决方法通常具有其他含义,但是您会错过这些可能性。

正如Kilian承认的那样,另一个考虑因素是,大多数Scala开发人员默认情况下忽略分号。如果您避免自己使用惯用的Scala,您希望如何与其他人的代码一起工作?您将发现它比需要的困难得多。

我不能过分强调,选择了Scala解析器的这些功能来鼓励使用干净,可重用和功能性(在fp意义上)的代码。以中缀运算符语法为例;它鼓励开发人员为类提供简单,单一用途的方法,这些方法可以很好地组合在一起。Scala的收藏库显示了它的工作效果如何。接受此培训的受过经典培训的Java开发人员将倾向于养成更好的习惯和新的代码思考方式。那些坚持所有熟悉的点和括号的人将会错过。我认为,对于那些胆小又不能放弃分号的人也是如此。


8
-1是,由于编译器陷阱而被“强制”学习该语言,而C ++则已过时。而且,断言背后没有什么证据,我希望以这样的偏见来回答。
Telastyn

(1)@Telastyn所说的-如果您真的想以这种方式学习语言,请养猫,他们喜欢坐在键盘上,因为他们关心您的学历。(2)的省略分号有什么做用干净的风格或鼓励它-如果有的话,下探分号被隐藏的事实,这些都是单独的语句是顺序执行,并可能有副作用。保留分号会使您意识到这一点,因此更喜欢使用功能性样式。因此,该决定纯粹是句法上的(例如,样式,解析等)。
Eli Barzilay

虽然“强迫学习语言”并没有奏效,但“按作者意图使用语言”和“像其他大多数开发人员一样使用语言”是重要的参考点。在多个开发人员之间保持一致的样式很有用。从这个答案和@Killan Foth的答案来看,维护者和大多数开发人员显然都认为分号是多余的。
莎拉·梅瑟
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.