Hace años, aprendí Applesoft Basic. Las cadenas siempre tenían el sufijo $
y las matrices tenían un sufijo de %
. Así es como funcionaba el idioma. Miraste algo, sabías lo que era. Nunca profundicé demasiado en el intérprete para entender por qué este fue el caso o las decisiones de diseño que lo hicieron así.
El sigilo en php proviene de su influencia perl (que fue influenciada por awk
y sh
). El sigilo en perl es bastante más que solo $
ya que puede identificar muchos tipos diferentes:
-
$
escalar
-
@
list
-
%
hash
-
&
codeblock
-
*
typeglob
El sigilo identifica qué parte de la estructura de la tabla de símbolos está viendo. Detrás de escena, la entrada de la tabla de símbolos para foo (a la que se accede mediante *foo
- el typeglob) tiene todo lo que puede ser un foo. Hay $foo
, @foo
, %foo
, el formato foo
, &foo
, el manejador de archivos foo, etc ...
Esto también permite hacer un alias de una variable a otra:
#!/usr/bin/perl
$foo = "foo";
@qux = (1,2);
*bar = \$foo;
*bar = \@qux;
print "$bar @bar\n";
Esto imprime foo 1 2
- en perl, esto es por lo que son los símbolos realmente , no es que debas hacer esto sino que hay algo detrás de escena que ellos hacen.
Los sigilos no son tan fáciles de leer, sino que pueden tener $foo
y @foo
sin tener una colisión en el espacio de nombres (compare otros idiomas donde no se puede tener ambos int foo; int[] foo;
)
Los sigilos para facilitar la lectura son algo que se aprende como parte de cualquier idioma: leer la sintaxis. Usted podría, hipotéticamente, hacer que el tipo en sí (como notación húngara) forme parte del identificador.
Algo en lex a lo largo de las líneas de:
typeChar [is]
capLetter [A-Z]
letter [a-z]
digit [0-9]
%%
{typeChar}{capLetter}(letter}|{digit})* { prientif("iddentifier");}
%%
Y entonces podrías tener un código como
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
No estoy diciendo que esto sea una buena idea, sino que alguien que esté acostumbrado al idioma pueda leerlo de forma nativa y pensar que mejora la legibilidad, mientras que alguien que no está familiarizado con el idioma puede pensar que simplemente agrega un montón de ruido al lenguaje.
Sin embargo, después de trabajar con un lenguaje definido de esta manera, probablemente podría leerlo sin problemas.
A algunas personas les gustan, otras no. Hay grandes guerras santas en varios foros que debaten esto y realmente se reducen a cuánto las has usado.
Uno podría diseñar un nuevo lenguaje para no programadores que use sigilos y cualquiera que nunca haya programado antes nunca se quejará ni un poco de ellos. Por otro lado, no podría tenerlos como parte del idioma y luego hacer que los programadores de ruby o perl se quejen de que se están perdiendo alguna información clave.
Realmente no importa. Lo que importa es cómo encajarían los sigilos en el lenguaje si los usas o no. ¿Quieres poder hacer "123 $foo 456"
o debes hacer "123 " + foo + " 456"
? Aquí es donde se debe tomar la decisión.