[scala--代码风格指南]--控制结构
2017-07-26 13:32
239 查看
英文原文:http://docs.scala-lang.org/style/
译文如下:
所有的控制结构应该在定义关键字之后写入一个空格:
// wrong!
if(foo) bar else baz
for(i <- 0 to 10) { ... }
while(true) { println("Hello, World!") }
在控制结构表示纯功能操作的情况下应省略花括号,并且控制结构的所有分支(与
if (foo) {
println("foo was true")
}
news match {
case "good" => println("Good news!")
case "bad" => println("Bad news!")
}
Scala有能力
- 解释。在这种情况下,可以使用两种可选的语法:
// right!
for {
x <- board.rows
y <- board.files
} yield (x, y)
虽然后一种风格更为冗长,但通常认为阅读更容易,更具有“可扩展性”(意味着它不会随着理解的复杂性增加而变得混淆)。您应该更喜欢这种形式来
这个规则的例外是
// right!
for (x <- board.rows; y <- board.files) {
printf("(%d, %d)", x, y)
}
最后,
在某些情况下,在更大的表达式中创建用于嵌套使用的简短
这里的关键是通过将两个分支与
译文如下:
所有的控制结构应该在定义关键字之后写入一个空格:
// 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表达式一起使用,也不应使用花括号。
相关文章推荐
- [scala--代码风格指南]--缩进
- [scala--代码风格指南]--命名规范
- [scala--代码风格指南]--声明
- [scala--代码风格指南]--类型
- [scala--代码风格指南]--Scaladoc
- [scala--代码风格指南]--嵌套块
- scala代码风格指南--<档>
- [scala--代码风格指南]--方法调用
- scala基础——控制结构和函数
- 大数据Spark “蘑菇云”行动前传第3课:在IDE下开发第一个Scala程序透彻解析及Scala控制结构详解实战
- Scala坑二(控制结构和函数)
- Scala坑二(控制结构和函数)
- scala 新的控制结构,函数调用结构的变化
- PEP 8 -- Python代码风格指南
- 【荐】Angular官方代码风格指南
- python的PEP8 代码风格指南
- scala自定义控制结构
- scala常用语法之控制结构
- Scala入门之控制结构
- scala 开发入门(2)-- 程序控制结构