Чтение 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 выбирает не предоставлять синтаксис.
Ясность субъективна, но вопрос в том, что рекурсивный стиль (хвост) предлагает улучшенную производительность?