如何避免return语句和for循环中的转义?

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)

lmm*_*lmm 7

避免的论点return是它导致代码不易读,而不是重构安全.如果你找到一种最好用那种方式表达的算法,这不是一个绝对的规则,但通常可以通过将代码写成表达式来使代码更清晰.

此特定代码看起来等同于:

def nextParen(chars: List[Char]) =
  chars.dropWhile{c => c != '(' && c != ')'}
Run Code Online (Sandbox Code Playgroud)

一般来说,尽量专注于编写表达式而不是程序 ; 而不是告诉编译器它应该采取什么步骤,告诉它值是什么.即使你不知道dropWhile,你也可以把循环写成一个折叠(例如foldLeft),说明在列表的每个元素上做什么,然后列表在末尾为空的情况会自然而然地出现,而不是而不是需要两个不同的分支,哪里有匹配,哪些没有.