162 votes

Pourquoi ne Lua tableaux(tableaux) commencent à 1 au lieu de 0?

Je ne comprends pas la justification de la décision de cette partie de Lua. Pourquoi ne l'indexation commence à 1? J'ai lu(comme beaucoup d'autres) ce grand papier. Il me semble étrange coin d'une langue qui est très agréable d'apprendre et de programme. Ne m'obtenez pas le mal, Lua est tout simplement génial, mais il y a une explication quelque part. La plupart de ce que j'ai trouvé(sur le web), il est juste de dire que l'indice commence à 1. L'arrêt complet.

Il serait très intéressant de lire ce que ses concepteurs dit sur le sujet.

Notez que je suis "très" débutant en Lua, j'espère que je ne suis pas rater quelque chose d'évident sur les tables.

188voto

Norman Ramsey Points 115730

Lua est un descendant de Sol, un langage conçu pour les ingénieurs pétroliers sans aucune formation en programmation informatique. Des gens pas formés dans le calcul pense qu'il est damné bizarre de commencer à compter à zéro. En adoptant 1-tableau de base et de la chaîne de l'indexation, la Lua concepteurs éviter de fausser les attentes de leurs clients et des sponsors.

Bien que j'ai aussi trouvé bizarre au début, j'ai appris à aimer de 0 basée sur les tableaux. Mais je reçois par OK avec Lua 1-base de tableaux, en particulier par à l'aide de Lua génériques, for boucle et de l' ipairs opérateur—je peux habituellement ne pas inquiéter la manière dont les tableaux sont indexés.

54voto

Mark Rushakoff Points 97350

Dans la Programmation en Lua'première discussion, des tables, ils mentionnent:

Comme vous pouvez l'indice d'un tableau de toute valeur, vous pouvez commencer à les indices d'un tableau avec un nombre qui vous plaît. Cependant, il est de coutume en Lua pour commencer tableaux avec 1 (et non 0, comme en C) et de plusieurs installations de bâton à la présente convention.

Plus tard, dans le chapitre sur les structures de données, ils disent presque la même chose: que Lua est intégré dans des installations assumer 1-en fonction de l'indexation.

De toute façon, il ya un couple de convenances à l'aide de 1 à base d'indexation. À savoir, l' # (longueur) opérateur: t[#t] accéder à la dernière (numérique) de l'index de la table, et t[#t+1] accède 1 passé le dernier indice. Pour quelqu'un qui n'a pas déjà été exposés à 0 basée sur l'indexation, #t+1 serait plus intuitif aller au-delà de la fin d'une liste. Il y a aussi Arus for i = 1,#t construire, qui, je crois, relève de la même catégorie que le point précédent que "1 pour la longueur", peut être plus sensible que l'indexation "0 à la longueur de moins de 1".

Mais, si vous ne pouvez pas briser la mentalité de 0 basée sur l'indexation, Arus 1-en fonction de l'indexation peut certainement être un obstacle. En fin de compte, les auteurs ont voulu quelque chose qui a travaillé pour eux; et je vais vous avouer que je ne sais pas quelle est leur origine objectif était, mais c'est probablement changé depuis.

23voto

johannes_lalala Points 53

Il y a une raison importante de ne PAS compter de tableaux à partir de 1: Si les tableaux de commencer à partir de zéro, vous pouvez les utiliser comme algébrique des anneaux d'une manière naturelle. E. g. nous avons les jours de la semaine (day={'mo', 'tu', 'we'...) et nous voulons CYCLE à travers eux. Ensuite, il serait beaucoup moins mindbending à écrire:

nextday = day[(i+1)%7]  as it is in almost every other language

Que:

nextday = day[i%7+1] as it is in lua

ne semble pas être si mal que ça au premier abord, mais essayez de cycle de la semaine dans l'autre sens. Je suis un mathematican, mais j'ai accepté le fait que quand il s'agit de la programmation, de compter à partir de zéro est juste la meilleure option..

c'est dommage, lua pourrait être cool si ce n'était pas pour ça (et le manque lamba idiome)

17voto

dash-tom-bang Points 9384

Ma compréhension est que c'est de cette façon simplement parce que les auteurs ont pensé que ce serait une bonne façon de le faire, et après ils ont roulé la langue le public de cette décision calcifié considérablement. (Je soupçonne il serait l'enfer à payer étaient-ils à changer aujourd'hui!) Je n'ai jamais vu une justification particulière au-delà.

8voto

VXZ Points 29

Peut-être moins importante, mais je n'ai pas entendu encore mentionné: il y a une meilleure symétrie dans le fait que le premier et le dernier caractère dans une chaîne sont à 1 et -1 respectivement, au lieu de 0 et -1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X