我习惯用Java的分号来分隔语句,所以自然也用Scala代码来完成。我还认为代码更易于阅读,因为很明显一个语句在哪里结束而另一个语句在哪里开始。但是很多时候,当我在SO上发布一段Scala代码时,代码被编辑只是为了删除分号。
- 是否应该使用分号?是否有任何“官方”准则或编码风格?
- 是否有需要分号的情况,否则代码不明确?
我习惯用Java的分号来分隔语句,所以自然也用Scala代码来完成。我还认为代码更易于阅读,因为很明显一个语句在哪里结束而另一个语句在哪里开始。但是很多时候,当我在SO上发布一段Scala代码时,代码被编辑只是为了删除分号。
Answers:
尚无正式的“正确”方法,但是大多数从业者会尽可能地省略分号(这就是为什么许多人反身删除分号的原因)。
该语言非常努力,使您完全不需要终止语句。不幸的是,它并没有完全成功,因此在各种复杂的情况下,必须使用分号或一组额外的括号或类似的“提示”来避免不必要的语义。这种情况几乎是很少见的,通常您不必考虑它们。关于这是否意味着您应该防御性地打孔(这是我的想法)还是在遇到麻烦之前绝不打断(这是大多数用户的想法),意见不一。归根结底,这取决于您是否自认是叛徒或模范公民。
您想了解多少您使用的语言?您是否想发挥自己的优势?Scala的语法鼓励清晰简洁的代码。利用这种方法会导致Scala解析器出现问题的一些极端情况是有启发性的(也就是说,您通过遇到和学习如何避免它们来了解有关Scala的更多信息)并逐渐得到解决(例如,后缀表示法)。防御性地使用分号可能意味着您永远不必了解这些问题,但是您真的认为这是一件好事吗?这些问题的解决方法通常具有其他含义,但是您会错过这些可能性。
正如Kilian承认的那样,另一个考虑因素是,大多数Scala开发人员默认情况下忽略分号。如果您避免自己使用惯用的Scala,您希望如何与其他人的代码一起工作?您将发现它比需要的困难得多。
我不能过分强调,选择了Scala解析器的这些功能来鼓励使用干净,可重用和功能性(在fp意义上)的代码。以中缀运算符语法为例;它鼓励开发人员为类提供简单,单一用途的方法,这些方法可以很好地组合在一起。Scala的收藏库显示了它的工作效果如何。接受此培训的受过经典培训的Java开发人员将倾向于养成更好的习惯和新的代码思考方式。那些坚持所有熟悉的点和括号的人将会错过。我认为,对于那些胆小又不能放弃分号的人也是如此。