Szukasz wydajności w niewłaściwym miejscu. Problem z wywołaniami funkcji nie polega na tym, że kosztują dużo. Jest inny problem. Wywołania funkcji mogą być całkowicie darmowe, a ty nadal będziesz mieć ten inny problem.
Jest tak, że funkcja jest jak karta kredytowa. Ponieważ możesz go łatwo używać, zwykle używasz go częściej niż powinieneś. Załóżmy, że nazywasz to 20% więcej, niż potrzebujesz. Następnie typowe duże oprogramowanie zawiera kilka warstw, z których każde wywołuje funkcje w warstwie poniżej, więc współczynnik 1,2 może zostać złożony z liczbą warstw. (Na przykład, jeśli jest pięć warstw, a każda warstwa ma współczynnik spowolnienia równy 1,2, złożony współczynnik spowolnienia wynosi 1,2 ^ 5 lub 2,5.) To tylko jeden sposób, aby o tym pomyśleć.
Nie oznacza to, że należy unikać wywołań funkcji. Oznacza to, że kiedy kod jest uruchomiony, powinieneś wiedzieć, jak znaleźć i wyeliminować marnotrawstwo. Istnieje wiele doskonałych porad, jak to zrobić w witrynach Stackexchange.
To jeden z moich wkładów.
DODANO: Mały przykład. Kiedyś pracowałem w zespole oprogramowania na poziomie fabryki, który śledził szereg zleceń pracy lub „zleceń”. Była funkcja, JobDone(idJob)
która mogła stwierdzić, czy zadanie zostało wykonane. Zadanie zostało wykonane, gdy wszystkie jego poddziałania zostały wykonane, a każde z nich zostało wykonane, gdy wszystkie jego podoperacje zostały wykonane. Wszystkie te rzeczy były śledzone w relacyjnej bazie danych. Pojedyncze wywołanie innej funkcji może wyodrębnić wszystkie te informacje, tzw JobDone
. Tę inną funkcję, sprawdzić, czy zadanie zostało wykonane, i odrzucić resztę. Wtedy ludzie mogliby łatwo napisać taki kod:
while(!JobDone(idJob)){
...
}
lub
foreach(idJob in jobs){
if (JobDone(idJob)){
...
}
}
Widzisz sens? Ta funkcja była tak „potężna” i łatwa do wywołania, że nazbyt się nazywała. Problemem wydajności nie były więc instrukcje wchodzące i wychodzące z funkcji. Chodziło o to, aby istniał bardziej bezpośredni sposób na stwierdzenie, czy zadania zostały wykonane. Ponownie ten kod mógł zostać osadzony w tysiącach wierszy kodu, który byłby niewinny. Wszyscy starają się to naprawić, ale to tak, jakby rzucać lotkami w ciemnym pokoju. Zamiast tego potrzebujesz go uruchomić, a następnie pozwolić, aby „powolny kod” powiedział ci, co to jest, po prostu przez poświęcenie czasu. Do tego używam losowego wstrzymywania .