Curiosità sul for

francesco.dev (33560 points)
14 51 129
asked Oct 4, 2017 in Programmare in Python by francesco.dev (33,560 points)
recategorized Oct 6, 2017 by francesco.dev
Ciao ragazzi!

Ho notato che in Python il costrutto iterativo for ha una struttura totalmente diversa da quella che si adoperava in C o in Java.
Praticamente in Python un for, per come costruito, serve solo a scorrere le posizioni di un oggetto.
Infatti serve a scorrere le varie posizioni di una stringa, di una lista e così via.
Invece, ad esempio, in C o in Java potevamo rendere il ciclo for un ciclo indeterminato e che quindi assomigliasse al while (però fare quest'ultima cosa sarebbe il segno di una cattiva programmazione).

Ora, secondo voi, questo è stato fatto perché avendo già il while non serve ricreare e riportare in Python anche il costrutto iterativo for "puro", che trovavamo in C; oppure perché in questa sintassi il for è molto più compatto ed utile?

È una curiosità molto carina, che serve a capire del perché di questa scelta, ovvero del perché cambiare la sua sintassi così radicalmente (anche se il meccanismo è pressoché simile)!

Grazie a chi risponderà.
Buona giornata.

- Francesco Pio Scognamiglio

3 Answers

Best answer
mcarapella (1230 points)
1 8 16
answered Oct 4, 2017 by mcarapella (1,230 points)
selected Oct 4, 2017 by francesco.dev

Partendo dal presupposto che Python stesso si pone ad un livello di astrazione "più alto" rispetto ad altri linguaggi posso pensare che, per semplificare la vita a noi poveracci, avranno voluto distinguere in maniera netta due tipi di loop in base agli utilizzi. (for solo su elementi iterabili, while su condizione)

Quindi il motivo della scelta lo ricondurrei (forse ingenuamente) all'idea alla base del linguaggio: semplice e potente.

- Marco C.

francesco.dev (33560 points)
14 51 129
commented Oct 4, 2017 by francesco.dev (33,560 points)
Molto interessante! Penso tu abbia ragione e condivido il tuo pensiero. Grazie per aver risposto!
BlackStartx (1910 points)
6 16 30
answered Oct 4, 2017 by BlackStartx (1,910 points)
Ciao Francesco!

Secondo me hanno scelto questa strada per evitare la possibilità di cadere in quella che chiamiamo "cattiva programmazione".

Come già detto in una precedente domanda, la differenza tra while e for è proprio che dobbiamo usare il for esclusivamente quando siamo a conoscenza del numero di volte che il codice contenuto in esso verrà eseguito.

È dunque meno probabile inciampare in errori come questi con una sintassi di questo tipo.

- Leonardo
francesco.dev (33560 points)
14 51 129
commented Oct 4, 2017 by francesco.dev (33,560 points)
Grazie della risposta!
LeonardoEmili (35740 points)
11 65 155
answered Oct 4, 2017 by LeonardoEmili (35,740 points)
Ciao!
Mi trovo d'accordo con mcarapella , Python è un linguaggio di programmazione breve in sé ma davvero molto potente.
Se ci pensi bene puoi trovare molte similitudini tra il for in Python e il foreach in Php. Il costrutto lì era foreach var as var, oppure foreach var in var, i quali se ben ricordi non facevano altro che permetterti di iterare n volte (conosciute) un blocco di codice e in più ti passavano il valore (rispettivamente il valore con la key as o l'indice con la key in). Il for è quindi davvero molto simile da questo punto di vista, e credo che il motivo di fondo sia proprio che abbiano voluto integrare un così compatto, potente, e utile strumento anche in Python.
Un altro motivo sicuramente valido è come tu hai già detto per evitare di farci cadere nella cattiva programmazione confondendo while con for e viceversa, mentre così la distinzione tra i due rimane ben chiara!
Spero di essere stato esaustivo

Ti auguro una buona serata.

Leonardo Emili