Pe principiul ”omul din greșeli învață”, am să vă propun azi să înțelegem diferența dintre expresia i++ și ++i . Sunt sigur că i++ e nelipsit din utilizarea zilnică și așa devine oarecum expresia de facto pentru a incrementa o variabilă, dar în același timp suntem ”păcăliți” să credem că este echivalentă cu i+1.
Exemplele de mai jos sunt în PHP, însă le puteți adapta foarte ușor la alte limbaje, eliminând în principiu $ din fața numelor variabilelor.
Dacă rulăm următorul cod:
1 2 3 4 5 6 |
$i = $a = $b = 0; $a = $i++; $b = ++$i; echo "a={$a} iar b={$b}"; |
Vom vedea pe ecran: a=0 iar b=2; Ceea ce nu prea are sens nu? De fapt b=2 oarecum e corect deoarece, am pus de două ori ++ pe lîngă i și deci a fost incrementat de două ori.
Hai să mai luăm un caz, o funcție recursivă:
1 2 3 4 5 |
function f_loop($i, $max){ echo "Sunt la iteratia $i din $max <br/>"; if($i<$max) f_loop($i++, $max); } f_loop(1, 100); |
Dacă executăm codul de mai sus, o să observăm că rulează la ifinit, și afișează în continuu ”Sunt la iteratia 1 din 100”. Se pare că în acest caz simbolul local al funcției $i, nu se incrementează. Dar dacă schimbăm codul astfel:
1 2 3 4 5 |
function f_loop($i, $max){ echo "Sunt la iteratia $i din $max <br/>"; if($i<$max) f_loop(++$i, $max); } f_loop(1, 100); |
De această dată funcția va rula de 100 de ori.
Deci diferența dintre i++ și ++i e că expresia i++ incrementează valoarea lui i și returnează valoarea ne-incrementată pe când expresia ++i incrementează valoarea lui i și returnează valoarea incrementată.