如何避免return语句并从for循环中退出?

汤姆·约克

有人告诉我要避免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
}
毫米

避免使用的理由return是,它导致代码的可读性较差,并且不是重构安全的。这不是绝对的规则,如果您找到一种最佳方式表达的算法,但是通常可以通过将其编写为表达式来使代码更清晰。

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

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

通常,尝试着重于编写表达式而不是过程与其告诉编译器应该采取什么步骤,不如告诉其值是什么。即使您不知道dropWhile,您也可以将循环写为折叠(例如foldLeft),该折叠表示在列表的每个元素上要做什么,然后列表最后为空的情况自然会掉出来,而不是而不是需要两个不同的分支来匹配和不匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章