我认为Scala与简单性相差太远,就像它的语法一样.例如Martin Odersky在他的书中写了这个方法:
def calculate(s: String): Int =
if (cache.contains(s))
cache(s)
else {
val acc = new ChecksumAccumulator
for (c <- s)
acc.add(c.toByte)
val cs = acc.checksum()
cache += (s -> cs)
cs
}
Run Code Online (Sandbox Code Playgroud)
如果方法增长,读取代码变得非常痛苦,我无法匹配花括号,无法在IDE中折叠方法.那里有Scala编码约定吗?我觉得表达一个简单的方法太灵活了:
def add(b: Byte): Unit = {
sum += b
}
def add(b: Byte): Unit = sum += b
def add(b: Byte) { sum += b }
Run Code Online (Sandbox Code Playgroud)
mis*_*tor 27
这是Scala风格指南的链接.
Curly Braces部分说:
大括号:
在控制结构表示纯函数操作并且控制结构的所有分支(与if/else相关)是单行表达式的情况下,应省略大括号.请记住以下准则:
if - 如果你有else子句,则省略括号.否则,即使内容只是一行,也要用花括号括住内容.
while - 从不省略大括号(虽然不能以纯粹的功能方式使用).
for - 如果你有一个yield子句,则省略括号.否则,使用大括号包围内容,即使内容只是一行.
case - 如果case表达式ts在一行上,则省略括号.否则,为清晰起见使用花括号(即使解析器不需要它们).
Run Code Online (Sandbox Code Playgroud)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!") }
我希望人们遵循这个风格指南:(
请注意,我不同意"如果if
有else
条款,则忽略大括号"部分.我更喜欢看到这样的代码:
def calculate(s: String): Int = {
if (cache.contains(s)) {
cache(s)
} else {
val acc = new ChecksumAccumulator
for (c <- s) {
acc.add(c.toByte)
}
val cs = acc.checksum()
cache += (s -> cs)
cs
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9451 次 |
最近记录: |