英文原文:​http://docs.scala-lang.org/style/

译文如下:


缩进

缩进应遵循“2个空格的惯例”。因此,而不是像这样缩进:

​// wrong!​​​​class Foo {​​​​ def bar = ...​​​​}​

你应该这样缩进:


1. // right!
2. class Foo {
3. def bar = ..
4. }

Scala语言鼓励了嵌套范围和逻辑块(函数值等)的惊人数量。自己动手,不要在语法上自己找麻烦,开辟一个新的代码块。来自Java,这种风格确实需要一些习惯,但这是值得的。

行包裹

有时单个表达式达到一个长度,它变得不可读,以将其限制在单行(通常长度超过80个字符的任何地方)。在这种情况下,首选 方法是通过将中间结果分配给值来简单地将表达式分解为多个表达式。但是,这并不总是一个实际的解决方案。

当绝对需要将表达式包含在多行以上时,每个连续的行应该从第一行缩进两个空格 。还要记住,Scala要求每个“换行符”要么是一个未封闭的括号,要么以一个没有给出正确参数的中缀方法结束:

  1. val result = 1 + 2 + 3 + 4 + 5 + 6 +
  2. 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 +
  3. 15 + 16 + 17 + 18 + 19 + 20

没有这种拖尾的方法,Scala会在一行的末尾推测出一个分号,这个行的意思是打包,有时甚至没有一个警告就抛出编译。

具有大量参数的方法

当调用一个需要大量参数的方法(在五个或更多的范围内)时,通常需要将方法调用包含在多行中。在这种情况下,将每个参数本身放在一行上,缩进当前缩进级别的两个空格:

  1. foo(
  2. ,
  3. ,
  4. "this is a string",
  5. 3.1415)

这样一来,所有参数都会排队,但是如果稍后更改方法的名称,则不需要重新对齐它们。

应该非常小心,以避免这种类型的调用在线路的长度上。更具体地说,当每个参数必须缩进超过50个空格以实现对准时,应该避免这种调用。在这种情况下,调用本身应该移动到下一行并缩进两个空格:


1. // right!
2. val myLongFieldNameWithNoRealPoint =
3. (
4. ,
5. ,
6. "this is a string",
7. 3.1415)
8. // wrong!
9. val myLongFieldNameWithNoRealPoint = foo(someVeryLongFieldName,
10. ,
11. "this is a string",
12. 3.1415)

更好的是,只是尝试避免任何需要两三个参数的方法!