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 .