Tho*_*kke 2 functional-programming scala
我被告知要避免return
在Scala中使用,尽管我不确定为什么.
我有以下代码,除非我把return
关键字放在那里,它似乎没有返回正确的东西.我为什么要放return
?
def nextParen(chars: List[Char]): List[Char] =
for(i <- 0 to chars.size - 1) {
if(chars(i) == '(' || chars(i) == ')') {
return chars.slice(i, chars.size) // return HERE!
}
}
List.empty
}
Run Code Online (Sandbox Code Playgroud)
避免的论点return
是它导致代码不易读,而不是重构安全.如果你找到一种最好用那种方式表达的算法,这不是一个绝对的规则,但通常可以通过将代码写成表达式来使代码更清晰.
此特定代码看起来等同于:
def nextParen(chars: List[Char]) =
chars.dropWhile{c => c != '(' && c != ')'}
Run Code Online (Sandbox Code Playgroud)
一般来说,尽量专注于编写表达式而不是程序 ; 而不是告诉编译器它应该采取什么步骤,告诉它值是什么.即使你不知道dropWhile
,你也可以把循环写成一个折叠(例如foldLeft
),说明在列表的每个元素上做什么,然后列表在末尾为空的情况会自然而然地出现,而不是而不是需要两个不同的分支,哪里有匹配,哪些没有.
归档时间: |
|
查看次数: |
658 次 |
最近记录: |