Argomento dell'autorità
Bene ... Apparentemente, la maggior parte delle lingue, comprese quelle molto recenti, sono a base zero. Dato che quelle lingue sono state scritte da persone abbastanza abili, il tuo amico deve sbagliare ...
Perché uno?
perché 1 sarebbe un indice iniziale migliore di zero? Perché non 2 o 10? La risposta in sé è interessante perché mostra molto sul processo di pensiero delle persone che difendono l'idea.
Il primo argomento è che è più naturale, perché il primo è di solito quello prima di tutti gli altri, almeno per la maggior parte delle persone ...
L' argomento numero uno è che l'ultimo indice è anche la dimensione dell'array ...
Sono ancora colpito dalla "qualità" delle ragioni che di solito ascolto per questo tipo di argomenti ... E ancora di più quando mi viene in mente che ...
Perché non zero?
... Le notazioni "basate su una base" sono lasciate dalla cultura occidentale che ha ignorato l'esistenza dello zero per secoli, se non di più.
Che ci crediate o no, il calendario gregoriano originale va da -3, -2, -1, 1, 2, 3 ... Prova a immaginare il problema che ha contribuito alla scienza occidentale (ad esempio, quanti anni dal 1 ° gennaio -2 al 1 gennaio 2 per vedere che l'originale calendario gregoriano è in conflitto con qualcosa di semplice come la sottrazione ...).
Mantenere gli array a una base è come (beh, sarò abbattuto per quello ... ^ _ ^ ...), mantenendomi a miglia e iarde nel 21 ° secolo ...
Perché zero? Perché è matematica!
Prima (OOops ... Scusa ... ci riproverò)
Zero , Zero è niente, uno è qualcosa. E alcuni testi religiosi sostengono che "All'inizio non c'era niente". Alcune discussioni relative al computer possono essere ardenti quanto i dibattiti religiosi, quindi questo punto non è così fuori tema come sembra ... ^ _ ^
Innanzitutto , è più facile lavorare con un array a base zero e ignorare il suo valore zero che lavorare con un array a base zero e hackerare per trovare il suo valore zero. Questa ragione, tanto stupida quanto la precedente, ma poi, l'argomentazione originale a favore di array a una base era anche un errore.
In secondo luogo , ricordiamo che quando si ha a che fare con i numeri, è probabile che ci si occuperà di matematica in un momento o nell'altro, e quando si ha a che fare con la matematica, è probabile che non si abbia voglia di stupidi hack per aggirare convenzioni obsolete. La notazione basata su One ha afflitto anche la matematica e le date per secoli e, imparando dai nostri errori, dovremmo cercare di evitarlo nelle scienze orientate al futuro (compresi i linguaggi informatici).
In terzo luogo , per quanto riguarda le matrici del linguaggio del computer che sono legate all'hardware, alloca una matrice C di 21 numeri interi e sposta l'indicatore del puntatore di 10 verso destra, e avrai una matrice naturale [da -10 a 10]. Questo non è naturale per l'hardware. Ma è per la matematica. Certo, la matematica potrebbe essere obsoleta, ma l'ultima volta che ho controllato, la maggior parte delle persone nel mondo credeva che non lo fosse.
Quattro , come già indicato altrove, anche per posizione discreta (o distanze ridotte a valori discreti), il primo indice sarebbe zero, come il pavimento di un edificio (a partire da zero), il conto alla rovescia decrescente (3, 2, 1, ZERO !), l'altitudine al suolo, il primo pixel di un'immagine, la temperatura (zero Kelvin, per lo zero assoluto, o zero gradi centigradi, come temperatura di congelamento dell'acqua di 273 K). In effetti, l'unica cosa che inizia davvero con uno è il modo tradizionale di " primo , secondo , terzo , ecc." notazione di iterazione , che mi porta naturalmente al punto successivo ...
Cinque il punto successivo (che segue naturalmente il precedente ) è che i contenitori di alto livello dovrebbero essere accessibili non dall'indice, ma dagli iteratori , a meno che gli indici stessi non abbiano un valore intrinseco. Sono sorpreso che il tuo avvocato "di livello superiore" non l'abbia menzionato. Nel caso in cui l'indice stesso sia importante, puoi scommettere metà delle volte che hai in mente una domanda di matematica. E quindi, vorresti che il tuo contenitore fosse amico della matematica e non disabilitato per la matematica come "il tuo vecchio calendario gregoriano" a partire da 1, e che avesse bisogno di hack rigurgitati per farlo funzionare.
Conclusione
L'argomentazione del tuo collega programmatore è un errore perché lega inutilmente le abitudini linguistiche parlate / scritte, che sono, per natura, sfocate, nei linguaggi informatici (dove non vuoi che le tue istruzioni siano sfocate), e perché attribuendo erroneamente un hardware motivo per questo problema, spera di convincerti, man mano che le lingue diventano sempre più astratte, che l'array a base zero è un ricordo del passato.
Le matrici a base zero sono a base zero per ragioni legate alla matematica. Non per motivi legati all'hardware.
Ora, se questo è un problema per il tuo compagno programmatore, fagli iniziare a programmare con veri e propri costrutti di alto livello, come iteratori e cicli foreach.