In una funzione ricorsiva, è spesso efficace portare il risultato da un passaggio all'altro, per creare un'ottimizzazione della coda. Per segnalare all'utente, che non ha bisogno di fornire un parametro, può essere ragionevole nominare un parametro "risultato":
def removeOccurence [A] (slice: Seq[A], original: Seq[A]) = {
@scala.annotation.tailrec
def remove (leftOriginal: Seq[A], result: Seq[A]) : Seq[A] =
trimStart (slice, leftOriginal) match {
case (h :: tail) => remove (tail, h +: result)
case (Nil) => result.reverse
}
remove (original, Nil)
}
Ma più spesso uso 'carry' e 'sofar', che ho visto in natura, e che portano l'idea anche un po 'meglio, nella maggior parte dei casi.
Un secondo motivo è ovviamente, se il tuo argomento suggerisce la parola "risultato", ad esempio se fai una valutazione aritmetica. È possibile analizzare la formula, sostituire le variabili con valori e calcolare un risultato alla fine.
Una terza ragione è già stata dichiarata, ma ho una piccola deviazione: scrivi un metodo che svolge un certo lavoro, diciamo che valuta una forma di '' max ''.
def max = {
val result = somethingElseToDo
if (foo) result else default
}
Invece di chiamare il risultato '' risultato '', potremmo chiamarlo '' max '', ma in alcune lingue è possibile omettere le parentesi quando si chiama un metodo, quindi max sarebbe una chiamata ricorsiva al metodo stesso.
In generale, preferirei un nome che indichi quale sia il risultato. Ma se quel nome è già stato preso, forse da più di una variabile, attributo o metodo, perché c'è un campo della GUI, una rappresentazione di stringa, una numerica e una per il database, usando un'altra aumenta la probabilità di confusione. In breve i metodi da 3 a 7 linee, '' risultato '' non dovrebbe essere un problema per un nome.