W funkcji rekurencyjnej często skuteczne jest przenoszenie wyniku krok po kroku, aby zoptymalizować ogon. Aby zasygnalizować użytkownikowi, że nie musi on podawać parametru, uzasadnione może być nazwanie parametru „wynik”:
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)
}
Ale częściej używam „carry” i „sofar”, które widziałem na wolności, i które w większości przypadków są jeszcze lepsze.
Drugim powodem jest oczywiście to, że twój temat sugeruje słowo „wynik”, na przykład jeśli wykonujesz ocenę arytmetyczną. Możesz przeanalizować formułę, zastąpić zmienne wartościami i na końcu obliczyć wynik.
Trzeci powód został już podany, ale mam małe odchylenie: piszesz metodę, która wykonuje jakąś pracę, powiedzmy, że ocenia formę „max”.
def max = {
val result = somethingElseToDo
if (foo) result else default
}
Zamiast nazywać wynik „wynikiem”, moglibyśmy nazwać go „maks.”, Ale w niektórych językach można pominąć nawiasy podczas wywoływania metody, więc max byłoby rekurencyjnym wywołaniem samej metody.
Ogólnie wolałbym nazwę, która mówi, jaki jest wynik. Ale jeśli ta nazwa jest już zajęta, być może przez więcej niż jedną zmienną, atrybut lub metodę, ponieważ istnieje pole GUI, reprezentacja ciągu, numeryczna i jedna dla bazy danych, użycie innej zwiększa prawdopodobieństwo pomyłki. W krótkich metodach od 3 do 7 wierszy „wynik” nie powinien stanowić problemu dla nazwy.
ofTheJedi
używane do tego celu. To nie jest zalecenie, tylko mówię, że to widziałem.Zorglub ofTheJedi = //...; return ofTheJedi;