専門家によって書かれた Scala のドキュメントを読むと、後者の方が簡潔で明確であっても、while ループよりも末尾再帰の方が優れているという印象を受けることがあります。これは一例です
object Helpers {
implicit class IntWithTimes(val pip:Int) {
// Recursive
def times(f: => Unit):Unit = {
@tailrec
def loop(counter:Int):Unit = {
if (counter >0) { f; loop(counter-1) }
}
loop(pip)
}
// Explicit loop
def :@(f: => Unit) = {
var lc = pip
while (lc > 0) { f; lc -= 1 }
}
}
}
(はっきりさせておきますが、専門家はループについてはまったく言及していませんでしたが、この例では、まるで本能によるかのように、この方法でループを記述することを選択しました。これが私に疑問を投げかけたものです: 私は同様の本能を発達させるべきでしょうか.. )
while ループの唯一の改善点は、反復変数がループの本体に対してローカルであることと、変数の変更が固定された場所にあることですが、Scala はその構文を提供しないことを選択しています。
明確さは主観的なものですが、問題は (末尾の) 再帰スタイルによってパフォーマンスが向上するかどうかです。