La maggior parte delle lingue consente di inizializzare più variabili durante la dichiarazione di un'istruzione for
. In tutte le lingue il componente di condizione di un'istruzione for
viene valutato per ogni iterazione del ciclo. Quindi il seguente for($i=0; $i < foo(); $i++)
risulterebbe nella funzione foo()
chiamata in ogni iterazione. Finché foo()
continua a restituire un valore superiore a $i
del ciclo per continuare.
Questo è vero in C ++, C #, Java e PHP.
Ora, nell'ultimo esempio, supponiamo che la funzione foo()
restituisca un valore costante, ma è computazionalmente pesante da calcolare. Pertanto, chiamare foo()
per ciascuna iterazione rallenterebbe l'esecuzione del codice.
Esistono due pratiche comuni per risolvere questo problema.
$x = foo();
for($i = 0; $i < $x; $i++) {.....}
E
for($i = 0, $x = foo(); $i < $x; $i++) {....}
Preferisco il secondo perché è più facile leggere cosa fa $ x e a cosa serve.
EDIT:
Per rispondere alla domanda, se l'ottimizzazione del compilatore ha luogo. La risposta è No . Tutti i compilatori che ho visto continueranno a valutare l'istruzione di condizione di un ciclo for per ogni iterazione. Se questa condizione contiene una chiamata di funzione come count()
, verrà eseguita ogni volta.