Porque o índice de arrays, tuplas e vetores são baseados em zero em na maioria das linguagens.
A numeração baseada em zero é uma forma de numeração onde o elemento inicial de uma sequência recebe o índice zero, em vez do índice 1.
Numerar sequências começando em zero é bastante comum em notação matemática, em particular em combinatória, embora linguagens de programação para matemática geralmente indexem a partir de 1, em ciência da computação, índices de array geralmente começam em 0 em linguagens de programação modernas.
Origem e popularização:
Em 1967, Martin Richards criador da linguagem BCPL (precursora do C ), projetou arrays iniciando em zero como a posição natural para começar a acessar o conteúdo do array na linguagem, já que o valor de um ponteiro p usado como endereço acessa a posição p + 0 na memória. BCPL foi compilado pela primeira vez para o IBM 7094 ; a linguagem não introduziu pesquisas indiretas em tempo de execução, portanto, a otimização indireta fornecida por essas matrizes foi feita em tempo de compilação. No entanto, a otimização foi importante.
Edsger W. Dijkstra mais tarde, já em 1982, escreveu uma nota pertinente “Por que a numeração deve começar em zero” link analisando os possíveis representações de índices de matrizes, encerrando-os em uma desigualdade encadeada, combinando desigualdades de maneira perspicaz a um padrão de quatro possibilidades, demonstrando convictamente que matrizes baseadas em zero são melhor representadas por intervalos de índice não sobrepostos, que começam em zero, aludindo a intervalos abertos, semi-abertos e fechados, como acontece com os números reais. Os critérios de Dijkstra para preferir essa convenção estão em detalhes que ela representa sequências vazias de maneira mais natural ( a ≤ i < a ?) do que "intervalos" fechados ( a ≤ i≤ ( a − 1) ? ), e que com "intervalos" semiabertos de naturais, o comprimento de uma subsequência é igual ao limite superior menos o limite inferior ( a ≤ i < b dá ( b − a ) valores possíveis para i , com a , b e i, todos inteiros).
Além deste pontapé inicial, o uso do zero como índice decorre de opções de design incorporadas em muitas linguagens de programação influentes, incluindo C , Java e Lisp . Nesses três, os tipos de sequência (arrays C, arrays e listas Java e listas e vetores Lisp) são indexados começando com o subscrito zero. Particularmente em C, onde os arrays estão intimamente ligados à aritmética de ponteiros , isso torna a implementação mais simples: o subscrito refere-se a um deslocamento da posição inicial de um array, portanto, o primeiro elemento tem um deslocamento de zero.
A referência à memória por um endereço e um deslocamento é representada diretamente no hardware do computador em praticamente todas as arquiteturas de computador, portanto, esse detalhe de design em C torna a compilação mais fácil, ao custo de alguns fatores humanos. Nesse contexto, usar zero como ordinal não é estritamente correto, mas um hábito generalizado nessa profissão. Outras linguagens de programação, como Fortran ou COBOL , têm subscritos de matriz começando com um, porque foram concebidas como linguagens de programação de alto nível e, como tal, deveriam ter uma correspondência com os números ordinais usuais que antecedem a invenção do zero por muito tempo.
Pascal permite que o intervalo de uma matriz seja de qualquer tipo ordinal (incluindo tipos enumerados). APL permite definir a origem do índice para 0 ou 1 durante o tempo de execução programaticamente. Algumas linguagens recentes, como Lua e Visual Basic , adotaram a mesma convenção pelo mesmo motivo.
Acesse a referência para o texto na íntegra: