2009-03-05 2 views

risposta

36

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.

+0

In matematica di solito è più facile andare con l'indicizzazione zero (nella mia esperienza (BSc di terza classe)). –

+3

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

+2

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. –

0

Probabilmente è che JDBC è stato modellato su ODBC.

+0

Penso che entrambi siano stati modellati su un'interfaccia X/Open. –

0

Più umano, forse? Inoltre, il gruppo Matcher dell'espressione regolare di Java inizia con 1 come primo gruppo abbinato.

+1

Questo è standard con espressioni regolari dato che 0 è usato per indicare l'intera corrispondenza. – Eclipse

2

Personalmente vorrei aggiungere questo a cattivo design.

2

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.

15

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.