In una funzione ricorsiva, è spesso efficace portare il risultato da un passo all'altro, per ottenere un'ottimizzazione della coda. Per segnalare all'utente che non è necessario 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 l'argomento suggerisce la parola "risultato", ad esempio se si esegue una valutazione aritmetica. È possibile analizzare la formula, sostituire le variabili con valori e calcolare un risultato alla fine.
Un terzo motivo è già stato dichiarato, ma ho una piccola deviazione: scrivi un metodo che esegue un 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 la 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à preso, forse da più di una variabile, attributo o metodo, perché esiste un campo GUI, una rappresentazione di stringa, un valore numerico e uno per il database, l'uso di un altro aumenta la probabilità di confusione. In metodi brevi da 3 a 7 righe, il '' risultato '' non dovrebbe essere un problema per un nome.
ofTheJedi
usato per quello scopo. Non una raccomandazione, sto solo dicendo che l'ho visto.Zorglub ofTheJedi = //...; return ofTheJedi;