Potrebbe valere la pena confrontare con costrutti simili in altre lingue.
In python, per iterare su una sequenza, utilizziamo un generatore. C'è essenzialmente una sola operazione che puoi fare con un generatore: chiama next
che ottiene un elemento e fa avanzare il generatore. L'iterazione, una volta eseguita manualmente, viene eseguita ripetutamente chiamando next
per ottenere i termini della sequenza fino a quando non solleva StopIteration
per segnalare la fine della sequenza.
In java, per iterare su una sequenza, noi uno Iterator
. Esiste essenzialmente una sola operazione che puoi fare con un iteratore: chiama next
che ottiene un elemento e fa avanzare l'iteratore. L'iterazione, una volta eseguita manualmente, viene eseguita ripetutamente chiamando next
per ottenere i termini della sequenza fino a hasNext
restituisce false
per segnalare la fine della sequenza.
In C/C++ ... spesso vogliamo ottenere un elemento e avanzare attraverso la sequenza. È stato stabilito da molto tempo (AFAIK prima che esistesse C++) che questa operazione sia *p++
.
L'unico motivo per cui stiamo prendendo in considerazione l'idea di suddividere questo in due passaggi: un passo per ottenere l'elemento corrente e l'altro per passare al termine successivo è un artefatto di un dettaglio di implementazione .
In una situazione in cui uno è veramente pensare a questi due passaggi come cose indipendenti e indipendenti, quindi sarebbe meglio tenerli come espressioni separate.
Ma è relativamente ben stabilito che questo è non come le persone stanno pensando - le persone stanno pensando in termini di "ottenere un elemento e avanzare l'iteratore". L'iterazione, una volta eseguita manualmente, viene eseguita invocando ripetutamente *iter++
per ottenere i termini della sequenza, fino a quando iter == end_iter
restituisce true per indicare la fine della sequenza.
Quando si pensa in questo modo, suddividere il passaggio concettuale in due elementi sintatticamente separati (*iter
e ++iter
) è più incline agli errori che tenerlo come un singolo passaggio.
Qualcuno stava fumando qualcosa quando è stato scritto. Chiaramente il 2 non è ambiguo. – leppie
Penso più codice. Scrivere più codice porta a più incline agli errori. –
Non vedo questo codice nel libro. Sei sicuro della pagina? Quale capitolo/paragrafo è? – Brahim