poniedziałek, września 25, 2023

Prefix vs suffix dla ++ i --

Rozwiązywałem sobie dziś zadanie na LeetCode i mam tam teraz taką linię:

if (a[c-'a']--==0) return c;

chociaż wcześniej było:

if (a[c-'a']==0) return c;
a[c-'a']--

Ta wcześniejsza wersja mnie jednak ciut raziła więc zmieniłem w tą którą napisałem wcześniej.
Stwierdzam jednak, że wersja -- i ++ po zmiennej jest taka dziwna, bo trzeba się jednak wysilić by zrozumieć, że ta operacja wykona się dopiero po warunku. 

Nie zmienia to jednak faktu, że mam pewną słabość do tej pierwszej wersji ;-) Jakieś to takie bardziej kompaktowe jest.

Ciekawa sprawa bo np. w Elements of Programming Interviews in Java: The Insiders' Guide wszędzie używają gdy mogą wersji prefiksowej, zamiast sufiksowej bo wtedy ten kod który mam wyżej wyglądałby jak:

if (--a[c-'a']<0) return c;

i jakby się go czytało to by było "robimy dec na wartości tablicy dla danego znaku i jeśli jest mniejsza niż zero to zwracamy znak".

Ale tak się zastanawiam czy w kodzie produkcyjnym wypadałby użyć którejkolwiek z tych wersji innej niż 2, bo może i brzydka, ale wyraźnie widać co się dzieje.



Podobne postybeta
Zaczynam woleć Map&amp;amp;amp;lt;Key,int[]&amp;amp;amp;gt; nad Map&amp;amp;amp;lt;Key,Integer&amp;amp;amp;gt; ;-)
Olśnienia :-)
Autoboxing/Unboxing nie lubi sie z var - nadal ;-)
Google App Engine - pierwsze wrażenia
Kod jako insight w umysł ;-)

Brak komentarzy:

Prześlij komentarz