Opłaca się dzielić kod na "części" wewnątrz funkcji?

0

Chodzi mi o takie coś jak na przykładach niżej, "lepiej" robić tak jak na przykładzie pierwszym czy drugim? Jakie jest wasze zdanie na ten temat?
Pomijając trudność z debuggowaniem i względy estetyki kodu.

Zmienna := Funkcja(Funkcja(Funkcja(X, Y), Funkcja(X, Y)), Y);
var
  Result1, Result2: Integer;
begin
  Result1 := Funkcja(X, Y);
  Result2 := Funkcja(X, Y);

  Result1 := Funkcja(Result1, Result2);
  Zmienna ;= Funkcja(Result1, Y);
end;
1

Jak widzę poziom zagłębienia wywołań funkcji większy niż 2, to zaczynam dostawać palpitacji.
Zdecydowanie punkt drugi (kompilator tak czy siak powinien to zoptymalizować do pierwszej formy, więc zmiany w kodzie wynikowym nie będzie, ale czytelność znacznie większa).

3

Dobry kod to czytelny kod :)
Pamiętaj o tym, że gdy napotkasz problem to będziesz chciał pokazać swój kod innym (np. tutaj), a wówczas czytelność kodu będzie mieć kluczowe znaczenie.

2

debugowanie pierwszego to koszmar, więc rozwiązanie nr 2 wbrew pozorom może być wygodniejsze (i bardziej czytelne).

0

Pomijając trudność z debuggowaniem i względy estetyki kodu.

A dlaczego pomijając?
Oczekujesz odpowiedzi i podświadomie ją znasz.
To tak jakbyś napisał:
"porównajmy najnowsze Porshe z naszym polskim fiatem 126p, oczywiście pomińmy, prędkość maksymalną, moc silnika, szybkość osiągnięcia 100km/h itd".

Jeśli coś porównać to bierzmy wszystkie cechy pod uwagę, a w szczególności te najważniejsze.
A Ty dwie cechy podstawowe i to najważniejsze jakie chyba tylko mogą być, chcesz pominąć. A to one właśnie są kluczem do odpowiedzi.

Oczywiście, że wersja 2 jest lepsza właśnie dzięki łatwości debuggowania i estetyki kodu.

0

Chodziło mi bardziej o wydajność. W drugim przykładzie te kilka wartości trzeba zapisać do zmiennej.
Wydaje mi się że gdyby powtórzyć tą funkcję bilion razy to może wyszła by z tego milisekunda różnicy. Tylko nie jestem pewien.

PS; Napisałem sobie taki "zegarek", i wyszło mi że przypisanie

i = 4;

100 milionów razy trwa 47ms.
Czyli jedno takie przypisanie to ~ 0.5 nanosekundy.

2
TomRiddle napisał(a):

Chodziło mi bardziej o wydajność. W drugim przykładzie te kilka wartości trzeba zapisać do zmiennej.

Przecież normalny kompilator poskłada to tak, że nie będzie żadnych dodatkowych zmiennych. W tym pomaga też const-correctness.

0

Poczytaj o RVO.

1 użytkowników online, w tym zalogowanych: 0, gości: 1