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 lenguaje. Miraste algo, sabías lo que era. Nunca profundicé demasiado en el intérprete para entender por qué este era 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
@
lista
%
picadillo
&
bloque de código
*
typeglob
El sigilo identifica qué parte de la estructura de la tabla de símbolos está mirando. Detrás de escena, la entrada de la tabla de símbolos para foo (a la que se accede mediante *foo
- the typeglob) tiene todo lo que puede ser un foo. Hay $foo
, @foo
, %foo
, el formato foo
, &foo
el gestor de archivo 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, para eso están realmente los sigilos , no para que debas hacer esto, sino para que haya algo detrás de escena que hacen.
Los sigilos no existen tanto para la legibilidad, sino para que uno pueda tener $foo
y @foo
sin tener una colisión en el espacio de nombres (compare otros idiomas donde no se pueden tener ambos int foo; int[] foo;
)
Los signos de legibilidad son algo que se aprende como parte de cualquier lenguaje: leer la sintaxis. Hipotéticamente, podría forzar el tipo en sí (como notación húngara) como 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 luego podrías tener un código como
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
No digo que sea una buena idea, sino que alguien que esté acostumbrado al idioma pueda leerlo de forma nativa y piense 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 idioma.
Sin embargo, después de trabajar con un lenguaje definido de esta manera, probablemente podría leerlo sin problemas.
A algunas personas les gustan, a otras no. Hay grandes guerras santas en varios foros que debaten esto y realmente se reduce a cuánto las has usado.
Se podría diseñar un nuevo lenguaje para los no programadores que usa sigilos y cualquiera que nunca haya programado antes nunca se quejará un poco de ellos. Por otro lado, no podría tenerlos como parte del lenguaje 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 los sigilos encajarían en el idioma 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.