Muchos lenguajes de script como Perl, Awk, Bash, PHP, etc. usan un signo $ antes de los nombres de los identificadores. Traté de buscar por qué pero nunca tuve una respuesta satisfactoria.
Muchos lenguajes de script como Perl, Awk, Bash, PHP, etc. usan un signo $ antes de los nombres de los identificadores. Traté de buscar por qué pero nunca tuve una respuesta satisfactoria.
Respuestas:
El shell Bourne o su predecesor fue probablemente el origen de la convención. Los shells tienden a usarse $foo
para referirse a una variable de shell o variable de entorno, mientras que solo foo
se toma como una cadena literal (que podría ser un nombre de comando, un nombre de archivo o simplemente una palabra para pasar a otro comando).
Probablemente sea una cuestión de minimizar cuánto tienes que escribir. En la mayoría de los lenguajes de programación, la mayoría de lo que escriba serán palabras clave (de un pequeño conjunto fijo) y nombres de cosas que han sido declaradas; tiene sentido usar solo un nombre para esos. Los literales de cadena están encerrados entre comillas (simples o dobles) para distinguirlos sintácticamente.
En un shell interactivo, la mayoría de las cosas que escriba serán nombres de comandos y nombres de archivos, por lo que tiene sentido tener una forma no decorada. Los nombres de variables no se usan con tanta frecuencia, por lo que precederlos con $
es una forma sencilla de distinguirlos.
El seguimiento $
que algunos BASIC usan para las variables de cadena (en oposición a las variables numéricas) probablemente fue también una inspiración.
La elección de Perl para usar $
para variables escalares se inspiró indudablemente en shells como el shell Bourne, y las primeras versiones de Perl comúnmente trataban las palabras vacías como literales de cadena ( print FOO
y print "FOO"
eran equivalentes). Este uso de palabras vacías ha quedado en desuso en versiones más modernas de Perl, pero los sigilos permanecen y se utilizan principalmente para distinguir diferentes tipos de variables. Quizás si Perl fuera diseñado desde cero, las variables escalares podrían denotarse con un "sigilo vacío", pero eso no sucedió.
(Por cierto, Awk no usa sigilos. Tiene una $
sintaxis, pero se refiere a números de campo. NF
Es el número de campos; $NF
es el último (el NF
campo)).
Un signo de $ en el nombre de la variable es un caso especial de "Sigil" . En los primeros días de BASIC (más o menos en 1964) se usaba $ para denotar nombres de variables de cadena. Supongo que, dado que facilita a los compiladores separar nombres de variables del resto de la gramática usando algún símbolo, y dado que era común a BASIC, su uso ha progresado. Sin embargo, este no es el único utilizado.
$
cadenas for (y %
for integers) en Basic eran un sufijo en lugar de un prefijo, al menos en las variantes (no estándar) que me infligían. No es que eso sea significativo, por supuesto: el sufijo frente al prefijo es bastante superficial, al menos en lo que respecta a los compiladores y el análisis léxico. Puede haber una ligera diferencia en términos de legibilidad.
Esto parece originarse en BASIC, donde el sufijo $ indica una variable de cadena y también se pronunció como "cadena". Por ejemplo, INKEY $ se pronuncia "en cadena clave".
¿Pero por qué el signo de dólar? Bueno, $ se parece un poco a S para string. Y según Wikipedia :
Como el signo de dólar es uno de los pocos símbolos que, por un lado, está casi universalmente presente en los conjuntos de caracteres de la computadora, pero, por otro lado, rara vez se necesita en su significado literal dentro del software, el carácter $ se ha utilizado en las computadoras para muchos fines no relacionados con el dinero.
(Apropiadamente, por unos pocos dólares más está en la televisión mientras escribo esto).
Por qué no? Es más fácil escribir un lexer que pueda indicar que un identificador será una variable (y, en consecuencia, más fácil de escribir el analizador sintáctico), especialmente para un lenguaje interpretado. En cuanto a por qué $
, es probable que sea en gran parte una tradición: uno de los creadores de un lenguaje temprano que usaba el constructo (¿Bash?