Il y a des années, j'ai appris Applesoft Basic. Les chaînes étaient toujours suffixées $
et les tableaux avaient un suffixe de %
. C'est comme ça que la langue fonctionnait. Vous avez regardé quelque chose, vous saviez ce que c'était. Je ne suis jamais allé trop loin dans l'interprète pour comprendre pourquoi c'était le cas ou les décisions de conception qui l'ont fait.
Le sceau en php provient de son influence perl (qui a été influencée par awk
et sh
). Le sceau en perl est bien plus que juste $
car il peut identifier de nombreux types différents:
$
scalaire
@
liste
%
hacher
&
bloc de code
*
typeglob
Le sceau identifie la partie de la structure de la table des symboles que vous regardez. Dans les coulisses, l'entrée de la table des symboles pour foo (accessible via *foo
- le typeglob) a tout ce qui peut être un foo. Il y a $foo
, @foo
, %foo
, le format foo
de , &foo
, le descripteur de fichier foo, etc ...
Cela permet également de créer un alias d'une variable à une autre:
#!/usr/bin/perl
$foo = "foo";
@qux = (1,2);
*bar = \$foo;
*bar = \@qux;
print "$bar @bar\n";
Cela imprime foo 1 2
- en perl, c'est à cela que servent vraiment les sceaux , non pas que vous fassiez cela mais plutôt qu'il y a cette chose en coulisses qu'ils font.
Les sceaux ne sont pas tellement là pour la lisibilité, mais plutôt pour que l'on puisse avoir $foo
et @foo
sans avoir une collision dans l'espace de noms (comparer d'autres langages où l'on ne peut pas avoir les deux int foo; int[] foo;
)
Les cachets de lisibilité sont quelque chose qui s'apprend dans le cadre de n'importe quel langage - lire la syntaxe. Vous pourriez, hypothétiquement, imposer le type lui-même (en notation hongroise) pour faire partie de l'identifiant.
Quelque chose dans lex le long des lignes de:
typeChar [is]
capLetter [A-Z]
letter [a-z]
digit [0-9]
%%
{typeChar}{capLetter}(letter}|{digit})* { prientif("iddentifier");}
%%
Et puis vous pourriez avoir du code comme
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
Je ne dis pas que c'est une bonne idée, mais plutôt que quelqu'un qui est habitué à la langue pourra le lire nativement et penser que cela améliore la lisibilité tandis que quelqu'un qui n'est pas familier avec la langue peut penser que cela ajoute simplement un tas de bruit à la langue.
Cependant, après avoir travaillé avec une langue définie de cette façon, je pourrais probablement la lire sans problème.
Certaines personnes les aiment, d'autres non. Il y a de grandes guerres saintes dans divers forums qui en débattent et cela se résume vraiment à combien vous les avez utilisées.
On pourrait concevoir un nouveau langage pour les non-programmeurs qui utilise des sceaux et quiconque n'a jamais programmé auparavant ne s'en plaindra jamais. D'un autre côté, vous ne pouvez pas les avoir dans le langage et demander aux programmeurs ruby ou perl de se plaindre de manquer des informations clés.
Ça n'a vraiment pas d'importance. Ce qui importe, c'est la façon dont les sceaux s'intégreraient dans la langue, que vous les utilisiez ou non. Voulez-vous pouvoir faire "123 $foo 456"
ou devez-vous faire "123 " + foo + " 456"
? C'est là que la décision doit être prise.