Pourquoi $ dans les noms d'identifiants pour autant de langues?
15
De nombreux langages de script comme Perl, Awk, Bash, PHP, etc. utilisent un signe $ avant les noms d'identifiant. J'ai essayé de chercher pourquoi, mais je n'ai jamais eu de réponse satisfaisante.
Le coquillage Bourne ou son prédécesseur est probablement à l'origine de la convention. Les shells ont tendance à utiliser $foopour faire référence à une variable shell ou à une variable d'environnement, alors que just fooest pris comme une chaîne littérale (qui peut être un nom de commande, un nom de fichier ou simplement un mot à passer à une autre commande).
Il s'agit probablement de minimiser la quantité que vous devez taper. Dans la plupart des langages de programmation, la plupart de ce que vous tapez sera des mots-clés (à partir d'un petit ensemble fixe) et des noms de choses qui ont été déclarées; il est logique d'utiliser juste un nom pour ceux-ci. Les littéraux de chaîne sont placés entre guillemets (simples ou doubles) pour les distinguer syntaxiquement.
Dans un shell interactif, la plupart des choses que vous tapez seront des noms de commande et des noms de fichier, il est donc logique d'avoir un formulaire non décoré pour eux. Les noms de variable ne sont pas utilisés aussi souvent, donc les précéder avec $est un moyen simple de les distinguer.
La fin $que certains BASIC utilisent pour les variables de chaîne (par opposition aux variables numériques) était probablement aussi une inspiration.
Le choix de Perl à utiliser $pour les variables scalaires a été sans aucun doute inspiré par des shells tels que le shell Bourne, et les premières versions de Perl généralement traitées comme des mots nus comme littéraux de chaîne ( print FOOet print "FOO"étaient équivalentes). Cette utilisation des mots nus est déconseillée dans les versions plus modernes de Perl, mais les sigils restent, et sont principalement utilisés pour distinguer différents types de variables. Peut-être que si Perl était conçu à partir de zéro, les variables scalaires pourraient être désignées par un "sceau vide", mais cela ne s'est pas produit.
(BTW, Awk n'utilise pas de sigils. Il a une $syntaxe, mais il fait référence aux numéros de champ. NFEst le nombre de champs; $NFest le dernier (le NFth) champ.)
Un signe $ dans le nom de variable est un cas particulier de "Sigil" . Au début de BASIC (environ 1964), $ était utilisé pour désigner les noms de variables de chaîne. Ma conjecture est, car il est plus facile pour les compilateurs de séparer les noms de variables du reste de la grammaire en utilisant un symbole, et comme c'était commun à BASIC, son utilisation a progressé. Cependant, ce n'est pas le seul utilisé.
Les $chaînes for (et %pour les entiers) dans Basic étaient un suffixe plutôt qu'un préfixe, au moins dans les variantes (non standard) avec lesquelles j'étais infligé. Ce n'est pas important, bien sûr - suffixe vs préfixe est assez superficiel, du moins en ce qui concerne les compilateurs et l'analyse lexicale. Il peut y avoir une légère différence en termes de lisibilité.
Steve314
BTW - l'une des raisons pour lesquelles il fonctionnait dans Basic est qu'il y avait une gamme très limitée de types, et aucun type défini par l'utilisateur, donc seule une gamme très limitée de sceaux était nécessaire. L'utilisation de Perl est différente - même si cela fait longtemps que je ne me souviens plus des détails.
Steve314
@ steve314, vous avez absolument raison A $ = ... Merci de l'avoir noté.
NoChance
5
awk?
Parfois appelé sigil , généralement utilisé pour traduire les noms des variables (et d'autres) en valeurs.
Cela semble provenir de BASIC, où le suffixe $ indique une variable de chaîne, et a également été prononcé comme "chaîne". Par exemple, INKEY $ se prononce "dans la chaîne de clés".
Mais pourquoi le signe dollar? Eh bien, $ ressemble un peu à S pour chaîne. Et selon Wikipedia :
Comme le symbole du dollar est l'un des rares symboles qui, d'une part, est presque universellement présent dans les jeux de caractères informatiques, mais, d'autre part, rarement utilisé dans leur signification littérale dans les logiciels informatiques, le caractère $ a été utilisé sur les ordinateurs à de nombreuses fins sans rapport avec l'argent.
(De façon appropriée, pour quelques dollars de plus est à la télé lorsque je tape ceci.)
Pourquoi pas? Il est plus facile d'écrire un lexer qui peut dire qu'un identifiant va être une variable (et par conséquent plus facile d'écrire l'analyseur), en particulier pour un langage interprété. Quant à savoir pourquoi $, c'est probablement en grande partie la tradition - l'un des créateurs d'un langage ancien utilisant la construction (Bash? Ou plus probablement un prédécesseur) l'a utilisé pour une raison quelconque et les langues suivantes l'ont adopté.
Réponses:
Le coquillage Bourne ou son prédécesseur est probablement à l'origine de la convention. Les shells ont tendance à utiliser
$foo
pour faire référence à une variable shell ou à une variable d'environnement, alors que justfoo
est pris comme une chaîne littérale (qui peut être un nom de commande, un nom de fichier ou simplement un mot à passer à une autre commande).Il s'agit probablement de minimiser la quantité que vous devez taper. Dans la plupart des langages de programmation, la plupart de ce que vous tapez sera des mots-clés (à partir d'un petit ensemble fixe) et des noms de choses qui ont été déclarées; il est logique d'utiliser juste un nom pour ceux-ci. Les littéraux de chaîne sont placés entre guillemets (simples ou doubles) pour les distinguer syntaxiquement.
Dans un shell interactif, la plupart des choses que vous tapez seront des noms de commande et des noms de fichier, il est donc logique d'avoir un formulaire non décoré pour eux. Les noms de variable ne sont pas utilisés aussi souvent, donc les précéder avec
$
est un moyen simple de les distinguer.La fin
$
que certains BASIC utilisent pour les variables de chaîne (par opposition aux variables numériques) était probablement aussi une inspiration.Le choix de Perl à utiliser
$
pour les variables scalaires a été sans aucun doute inspiré par des shells tels que le shell Bourne, et les premières versions de Perl généralement traitées comme des mots nus comme littéraux de chaîne (print FOO
etprint "FOO"
étaient équivalentes). Cette utilisation des mots nus est déconseillée dans les versions plus modernes de Perl, mais les sigils restent, et sont principalement utilisés pour distinguer différents types de variables. Peut-être que si Perl était conçu à partir de zéro, les variables scalaires pourraient être désignées par un "sceau vide", mais cela ne s'est pas produit.(BTW, Awk n'utilise pas de sigils. Il a une
$
syntaxe, mais il fait référence aux numéros de champ.NF
Est le nombre de champs;$NF
est le dernier (leNF
th) champ.)la source
Un signe $ dans le nom de variable est un cas particulier de "Sigil" . Au début de BASIC (environ 1964), $ était utilisé pour désigner les noms de variables de chaîne. Ma conjecture est, car il est plus facile pour les compilateurs de séparer les noms de variables du reste de la grammaire en utilisant un symbole, et comme c'était commun à BASIC, son utilisation a progressé. Cependant, ce n'est pas le seul utilisé.
la source
$
chaînes for (et%
pour les entiers) dans Basic étaient un suffixe plutôt qu'un préfixe, au moins dans les variantes (non standard) avec lesquelles j'étais infligé. Ce n'est pas important, bien sûr - suffixe vs préfixe est assez superficiel, du moins en ce qui concerne les compilateurs et l'analyse lexicale. Il peut y avoir une légère différence en termes de lisibilité.awk?
Parfois appelé sigil , généralement utilisé pour traduire les noms des variables (et d'autres) en valeurs.
la source
Cela semble provenir de BASIC, où le suffixe $ indique une variable de chaîne, et a également été prononcé comme "chaîne". Par exemple, INKEY $ se prononce "dans la chaîne de clés".
Mais pourquoi le signe dollar? Eh bien, $ ressemble un peu à S pour chaîne. Et selon Wikipedia :
(De façon appropriée, pour quelques dollars de plus est à la télé lorsque je tape ceci.)
la source
Pourquoi pas? Il est plus facile d'écrire un lexer qui peut dire qu'un identifiant va être une variable (et par conséquent plus facile d'écrire l'analyseur), en particulier pour un langage interprété. Quant à savoir pourquoi
$
, c'est probablement en grande partie la tradition - l'un des créateurs d'un langage ancien utilisant la construction (Bash? Ou plus probablement un prédécesseur) l'a utilisé pour une raison quelconque et les langues suivantes l'ont adopté.la source