Perché sto vedendo così tanti per (;;) costrutti? [chiuso]

14

Per il mio modo di pensare, un ciclo for viene utilizzato per iterare su un intervallo noto o determinabile.

String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }

che è equivalente (ambito di i da parte) a:

String[] names = //something;
int i = 0;
while (i < names.length )
{
   // do stuff
   i++;
}

In altre parole, il ciclo for è semplicemente uno zucchero sintattico (molto utile) per un costrutto while comunemente utilizzato.

Tuttavia, sto visualizzando molti costrutti for(;;) sul web che sono funzionalmente equivalenti a while(true)

Qual è il ragionamento per questo? Perché il loop infinito deve essere preferito sull'infinito ciclo while?

// Ho visto persino un libro di testo java che non usava affatto i loop! Conducendo a costrutti mostruosi come:

String input = getInput();
for( ; !inputIsValid(input) ; )
{
   //redo;
}
    
posta Chris Cudmore 10.11.2011 - 16:35
fonte

5 risposte

33

È una presa da vecchie pratiche di programmazione sul PDP-11 (sì, ho detto vecchio ). Ha usato per salvare una singola istruzione, che è stata utile per far girare i loop più velocemente.

Per ulteriori informazioni, consulta quanto segue: link

    
risposta data 10.11.2011 - 17:04
fonte
10

alcuni compilatori daranno un avvertimento (qualcosa come l'espressione condizionale è costante ) quando si usa while( 1 ) ma con for( ; ; ) non c'è nulla da mettere in guardia. I programmatori vogliono il codice senza avvisi, quindi usano la variante for.

    
risposta data 10.11.2011 - 17:16
fonte
5

È un'abitudine acquisita dalla programmazione C in cui non esiste un tipo booleano. Mentre (1) sarebbe l'equivalente potenzialmente ma For (;;) è spesso usato come appare in K & R se ricordo male. Sospetto che ci fosse una ragione hardware anche lì da qualche parte.

    
risposta data 10.11.2011 - 17:01
fonte
3

per (;;) può essere letto come "per sempre" che alcuni trovano più naturale di "mentre è vero".

    
risposta data 11.11.2011 - 00:06
fonte
-2

Tutti i programmatori esperti che ho chiesto possono riconoscere for(;;) più rapidamente di while(true) o while(1) .

    
risposta data 11.11.2011 - 01:58
fonte

Leggi altre domande sui tag