164 votes

Pourquoi on ne peut pas les noms de variables commencent avec les numéros?

Je travaillais avec un nouveau développeur c++, un temps, quand il a posé la question: "Pourquoi ne pouvez pas les noms de variables commencent avec les numéros?"

Je ne pouvais pas trouver une réponse, sauf que certains numéros peuvent avoir de texte (123456L, 123456U) et qui ne serait pas possible si les compilateurs ont pensé à tout avec une certaine quantité de caractères alpha est un nom de variable.

Etait-ce la bonne réponse? Sont-il d'autres raisons?

string 2BeOrNot2Be = "that is the question"; // Why won't this compile?

137voto

skiphoppy Points 16563

Car alors une chaîne de chiffres serait un identificateur valide ainsi qu'un numéro de série valide.

int 17 = 497;
int 42 = 6 * 9;
String 1111 = "Totally text";

127voto

Pyrolistical Points 12457

Réfléchissez bien à ce sujet:

int 2d = 42;
double a = 2d;

Qu'est ce qu'un? 2.0? ou 42?

Astuce, si vous ne l'obtenez pas, d après un certain nombre désigne le numéro de l'avant c'est une double littérale

71voto

Roy Dictus Points 19568

C'est une convention, mais il a commencé comme une exigence technique.

Dans les vieux jours, les analyseurs de langages comme FORTRAN ou de BASE ne nécessite pas les usages des espaces. Donc, fondamentalement, les actions suivantes sont identiques:

10 V1=100
20 PRINT V1

et

10V1=100
20PRINTV1

Supposons maintenant que le chiffre des préfixes ont été autorisés. Comment concevez-vous cela?

101V=100

comme 10 1V = 100

ou

101 V = 100

ou

1 01V = 100

Donc, cela a été rendu illégal.

15voto

Ken Gentle Points 10162

Les compilateurs/interpréteurs/analyseurs lexicaux était un long, long time ago pour moi, mais je pense que je me souviens d'y avoir de la difficulté à unambiguosly déterminer si un caractère numérique dans l'unité de compilation représenté un littéral ou un identifiant.

Langues où l'espace est insignifiant (comme ALGOL et l'original FORTRAN si je me souviens bien) ne pouvait pas accepter les numéros de commencer identifiants pour cette raison.

Cela va bien au-dos - devant des notations pour désigner le stockage ou numérique de base.

7voto

William Points 4403

C'est probablement une décision qui est venu pour quelques raisons, lorsque vous êtes à l'analyse du jeton, vous n'avez qu'à regarder le premier caractère de déterminer si c'est un identifiant ou littérale, puis de l'envoyer à la bonne fonction pour le traitement. Donc, c'est une optimisation des performances.

L'autre option serait de vérifier si elle n'est pas littérale et quittent le domaine de la identificateurs l'univers moins les littéraux. Mais pour ce faire, vous devez examiner chaque caractère de chaque jeton de savoir comment le classer.

Il y a aussi la stylistique des implications identificateurs sont censés être mnémoniques, les mots sont beaucoup plus faciles à mémoriser que des chiffres. Lorsque beaucoup de langues d'origine ont été écrits définissant les styles pour les prochaines décennies, ils n'étaient pas penser à son remplacement par "2" pour "pour".

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