您的位置:首页 > 编程语言

[scala--代码风格指南]--控制结构

2017-07-26 13:32 239 查看
英文原文:http://docs.scala-lang.org/style/

译文如下:



所有的控制结构应该在定义关键字之后写入一个空格:

// right!
if (foo) bar else baz
for (i <- 0 to 10) { ... }
while (true) { println("Hello, World!") }

// wrong!
if(foo) bar else baz
for(i <- 0 to 10) { ... }
while(true) { println("Hello, World!") }


一、大括号

在控制结构表示纯功能操作的情况下应省略花括号,并且控制结构的所有分支(与
if
/ 相关
else
)为单行表达式)。请记住以下准则:

if
- 如果您有一个
else
子句,请省略大括号。否则,即使内容只是一行,也可以用大括号包围内容。

while
- 不要省略大括号(
while
不能以纯粹的功能使用)。

for
- 如果您有一个
yield
子句,请省略大括号。否则,即使内容只有一行,也可以用卷曲括住内容。

case
 - 总是省略括号中的大括号。

val news = if (foo)
goodNews()
else
badNews()

if (foo) {
println("foo was true")
}

news match {
case "good" => println("Good news!")
case "bad" => println("Bad news!")
}




二、推导

Scala有能力
for
用多个生成器(通常多于一个
<-
符号)表示
- 解释。在这种情况下,可以使用两种可选的语法:

// wrong!
for (x <- board.rows; y <- board.files)
yield (x, y)

// right!
for {
x <- board.rows
y <- board.files
} yield (x, y)

虽然后一种风格更为冗长,但通常认为阅读更容易,更具有“可扩展性”(意味着它不会随着理解的复杂性增加而变得混淆)。您应该更喜欢这种形式来
for
解释多个生成器。仅使用单个发生器(例如
for
(i <- 0 to 10) yield i
)的理解 应使用第一个形式(括号而不是花括号)。

这个规则的例外是
for
缺少一个
yield
子句的理解 。在这种情况下,构造实际上是一个循环而不是一个功能的理解,而且通常更容易将生成器在括号之间串起来,而不是使用语法上混淆的
}
{
结构:

// wrong!
for {
x <- board.rows
y <- board.files
} {
printf("(%d, %d)", x, y)
}

// right!
for (x <- board.rows; y <- board.files) {
printf("(%d, %d)", x, y)
}

最后,
for
内涵是首选链式调用
map
, 
flatMap
filter
,因为这样可以得到难以阅读(这是增强的目的之一
for
理解)。




三、不重要的条件

在某些情况下,在更大的表达式中创建用于嵌套使用的简短
if
else
表达是有用的 。在Java中,这种情况传统上由Scala缺少的语法操作符(
?
:
)处理。在这些情况下(真的任何时候你有一个非常简短的
if
else
 表达式)允许将“then”和“else”分支放在
if
else
关键字相同的行上:

val res = if (foo) bar else baz


这里的关键是通过将两个分支与
if
/一起内联移动来阻止可读性
else
。请注意,此风格不应与命令式
if
表达式一起使用,也不应使用花括号。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: