Che cosa significa esattamente la parola inglese "for" in "for" loop?

4

L'inglese non è la mia prima lingua, ma dal momento che le parole chiave nei linguaggi di programmazione sono parole inglesi, di solito trovo facile leggere il codice sorgente come frasi inglesi:

  • if (x > 10) f(); = > "Se la variabile x è maggiore di 10 , chiama la funzione f ."
  • while (i < 10) ++i; = > "Mentre i variabile è inferiore a 10 , aumenta i di 1 ."

Ma come dovrebbe essere letto un ciclo for ?

  • for (i = 0; i < 10; ++i) f(i); = > ???

Voglio dire, so cos'è un ciclo for e come funziona. Il mio problema è solo che non so quale sia la parola inglese "for" esattamente in for loops.

    
posta kol 28.10.2013 - 12:31
fonte

5 risposte

17

Per questo caso particolare, sarebbe qualcosa di simile:

"Per ogni i che inizia da 0 fino a (ma non incluso) 10, fa f (i)"

Dovrebbe essere formulata in modo un po 'diverso se i numeri fossero doppi o le condizioni di loop fossero più complicate, ma non dovresti davvero preoccuparti se non riesci a trovare una traduzione dal suono davvero naturale all'inglese perché i linguaggi di programmazione sono solo basato sui linguaggi naturali o notazione matematica: for i = 1,... 10 è qualcosa che scrivi in matematica, che è molto più vecchio della programmazione.

    
risposta data 28.10.2013 - 12:46
fonte
11

È molto più confuso perché hai scritto un ciclo FOR in stile C, che in realtà non è un ciclo FOR; è un ciclo WHILE con sintassi strana. Il ciclo FOR è stato definito da ALGOL. Pascal e BASIC hanno raccolto il concetto; C, sfortunatamente, ha preso in prestito il nome ma non la semantica. (La migliore indicazione di questo è di guardare il costrutto for (;;) , non è possibile definire un vero ciclo FOR che non ha intervallo per iterare.)

L'idea è che tu definisca un intervallo di elementi e un'operazione per eseguire per ogni elemento. Ad esempio, in Pascal scriverebbe il tuo ciclo di esempio come:

for i := 0 to 9 do
   f(i);

In BASIC è simile:

for i = 0 to 9
   f(i)
next i

Questo è molto più leggibile: per ogni elemento i da 0 a 9, fai qualcosa con il valore. Nota che non c'è alcuna condizione di fine del ciclo che coinvolge i che è < 10 ; invece, viene specificato l'ultimo valore dell'intervallo (9).

    
risposta data 28.10.2013 - 13:30
fonte
1

I loop in C / C ++ sono molto flessibili e, come tali, non traducono direttamente in inglese molto bene. L'idea alla base del ciclo for è l'iterazione e quindi inizieresti a descrivere un semplice elenco di inizializzazione / condizione / incremento con for each value of i .

Questa è la mia rappresentazione inglese flessibile e molto dettagliata delle tue espressioni for loop:

for (i = 0; i < 10; ++i)

For each value of i (initially 0), and while i is less than 10, iterate by incrementing i.

Questa rappresentazione ti consente di adattarti a espressioni più complicate, come ad esempio:

int count = 10;
for (i = 0, j = count - 1; i < count; i++, j--) { //... }

For each value of i (initially 0) and j (initially count - 1), and while i is less than count, iterate by incrementing i and decrementing j.

O anche:

vector<T> v;
for(vector<T>::iterator it = v.begin(); it != v.end(); ++it) { //... }

For each value of it (initially the first element of v), and while it is not the last element of v, iterate by incrementing it to the next element of v.

    
risposta data 28.10.2013 - 21:11
fonte
0

In inglese usiamo for in contesti come "Questo è per i bambini sotto i 6 anni". La dichiarazione for è stata adattata nella programmazione strutturata in questo contesto.

Leggi for (i = 0; i < 10; ++i) f(i); come for (; i < 10;) f(i); e potrebbe essere più chiaro. L'istruzione for ha tre parametri: inizializzazione, condizione, aggiornamento. In alcune lingue, i parametri possono essere elenchi.

Per rendere le condizioni di ciclo più chiare di while loop equivalente. Se il corpo è lungo, l'incremento potrebbe non essere ovvio.

 i = 0;
 while ( i < 10 ) {
     f(i);
     i++;
 }

Nella seguente versione l'incremento è fuori posto. Il costrutto for non consente che l'incremento (aggiornamento) sia posizionato in modo errato in questo modo.

 i = 0;
 while ( i < 10 ) {
     i++;
     f(i);
 }

Alcune lingue forniscono un'istruzione for each che viene utilizzata per iterare su set.

    
risposta data 28.10.2013 - 13:17
fonte
-2

Definizione di Meriam Webster

For - "usato per indicare ... qualcosa sta andando verso o verso"

quindi la tua affermazione è i (a partire da 0) che va a 9.

    
risposta data 28.10.2013 - 12:47
fonte

Leggi altre domande sui tag