Ovunque in Java, qualsiasi cosa con un indice inizia da 0. C'è una ragione per il cambiamento qui o è solo un cattivo design?In JDBC, perché gli indici dei parametri per le istruzioni preparate iniziano a 1 anziché a 0?
risposta
Storicamente, i database hanno utilizzato l'indicizzazione basata su 1 per i parametri associati. Questo probabilmente riflette le origini dei database relazionali in teoria e matematica degli insiemi, quali elementi di indice che iniziano con uno, e utilizzare zero per rappresentare un insieme vuoto o vuoto.
Negli script di shell e nelle espressioni regolari, l'indice zero di solito significa qualcosa di "speciale". Ad esempio, nel caso degli script di shell, l'argomento "zeroth" è in realtà il comando che è stato invocato.
La scelta per JDBC è stata deliberata ma, in definitiva, probabilmente causa più confusione e difficoltà di quanto non risolva.
In matematica di solito è più facile andare con l'indicizzazione zero (nella mia esperienza (BSc di terza classe)). –
Non penso che l'indicizzazione basata su zero sia un artefatto matematico. Ogni libro di algebra lineare che ho inizia numerando righe/colonne con 1. FORTRAN predefinito da 1, se ricordo correttamente. Penso che l'indicizzazione basata su zero sia un retaggio di C e l'aritmetica del puntatore. – duffymo
Personalmente, penso che l'indicizzazione basata su 0 sia un ritorno all'aritmetica del puntatore C che sembra essersi bloccato ... alla sfortuna di tutti noi. –
Probabilmente è che JDBC è stato modellato su ODBC.
Penso che entrambi siano stati modellati su un'interfaccia X/Open. –
Più umano, forse? Inoltre, il gruppo Matcher dell'espressione regolare di Java inizia con 1 come primo gruppo abbinato.
Questo è standard con espressioni regolari dato che 0 è usato per indicare l'intera corrispondenza. – Eclipse
Personalmente vorrei aggiungere questo a cattivo design.
Capisco che sia JDBC che ODBC siano basati sull'interfaccia X/Open Call Level. Quindi, è una cronologia pre-Java, come i numeri dei mesi a 0.
Questo faceva parte di una trama dei designer linguistici originali per eliminare i deboli. Nella specifica originale, gli array erano numerati da -1 e gli elenchi con 1 elemento restituivano length = 0.
Oggi, solo l'API di calendario java rimane da questa trama diabolica.
Mi stavo chiedendo la stessa cosa, soprattutto perché i ResultSet sono anche a 1 indice. – Uri