2011-08-03 14 views
6

¿Alguien sabe, cuál es la razón real detrás de la "notación de la variable en dólares" en algunos de los lenguajes de scripting, es decir, PHP o Perl? Los creadores de Python no encontraron útil $variable, tampoco yo. ¿Por qué PHP y Perl me obligan a presionar shift-4 con tanta frecuencia?Notación de dólares en lenguajes de script: ¿por qué?

(OK, en Perl que de alguna manera se puede explicar con la distinción $scalar, @array y %hash pero aún así se podría evitar con éxito allí, el tipo no necesita ser explícito)

+0

en Perl @array puede ser un escalar en función del contexto (que devuelve la longitud de la matriz) – Bruce

+0

usted debe dar una oportunidad :) rubí – Sairam

+6

Esto se preguntó antes http://stackoverflow.com/questions/3073812/why-php-variables-start-with-a-sign-symbol – dpp

Respuesta

8

No sé si este es el motivo principal, pero si PHP no tuviera variables con un marcador de identificación, no sería posible.

echo "Welcome back $name, we last saw you on $date"; 

Actualización:

También crea algo llamado variable variable posible. La utilidad de una variable variable es discutible, y no recomendaría a nadie que haga un uso regular de ellos.

+1

Awesome answer. – Marty

+1

Parece que los lenguajes como PHP y Perl comenzaron como lenguajes de procesamiento de texto y, por lo tanto, querían tener formas rápidas de hacer lo que este ejemplo establece. Por lo tanto, creo que esta es la respuesta correcta. – Legolas

+6

Perl heredó esta sintaxis del script del shell, y PHP lo heredó de Perl. – mob

2

Lo usan al analizar de manera que las variables se puede distinguir fácilmente de otras cosas.

+0

Por "otras cosas "te refieres a las palabras clave, probablemente, pero tal vez hay 20 palabras clave por lo que también sería bastante fácil distinguirlos de otras cosas:) –

+0

@JakubM. Depende del idioma - perl por ej. tiene más de 260 palabras clave, php quizás menos, pero hay posibles colisiones entre funciones y otros símbolos (los importados de bibliotecas/módulos y los que puede definir). Además en lenguajes sin sigla - una palabra como 'map' o' command' no tiene un significado explícito (¿es una estructura de datos que he puesto en una variable? ¿O una función? ¿O un shell incorporado/ejecutable?) – shalomb

7

Uno de los objetivos de diseño con las variables de Perl era hacer que se distinguieran visualmente de las instrucciones internas, palabras reservadas, palabras de flujo de control, etc. Para alguien que no esté familiarizado con Perl, todas las pistas pueden parecer ruido de línea. Pero para alguien competente con Perl, los "sigilos", como se los llama, hacen que el código sea más legible y más comprensible. Como ya observó, el tipo de sigilo en Perl5 cambia dependiendo de los datos subyacentes a los que se accede. $ para escalar, @ para matriz y% para hash.

Pero existe la señal visual adicional de que $hash{key} se refiere al valor escalar contenido en el hash. El símbolo $ indica escalar, y los corchetes {} indican que estamos indexando en un hash (solo como ejemplo). En el caso de la indexación en una matriz, $array[0], por ejemplo: El $ nos dice que estamos accediendo al valor escalar contenido en la matriz, que se evidencia por los corchetes, en el punto índice entre los corchetes. Cuando vemos @array[1, 2, 3], tenemos un aviso visual inmediato a través del @ que estamos agarrando una lista de elementos (suponiendo un contexto de lista) de una matriz (los corchetes aún nos dicen que los estamos obteniendo de una matriz) . Esa es una porción de matriz. Una rebanada de hash sería @hash{qw/ this that the other/}. Entonces, una vez más, @ nos dice que busquemos una lista, y las llaves nos dicen que las estamos obteniendo de un hash. Cuando vemos un @ o un % sin paréntesis de postfix, estamos tomando toda la matriz o hash.

Las pistas se convierten en una segunda naturaleza rápidamente.

Perl6 es un poco diferente, y los usuarios expertos de Perl5 necesitarán algunos días para acostumbrarse. ;)

Hay un buen artículo de Wikipedia sobre el tema aquí: Sigil (Computer Programming)

Aparte de la guía visual, los sellos hacen otras cosas más fácil también; Desreferencia e interpolación, por ejemplo. Mientras que los operadores más elaborados podrían haber sido utilizados para algo así como la interpolación (y aún son necesarios ocasionalmente para eliminar la ambigüedad de dónde termina una variable y continúan los caracteres de las palabras contiguas), el objetivo era mantener las cosas simples fáciles, al tiempo que hacía las cosas difíciles.

6

Natural Language Principles in Perl:

Parte de la razón una lengua puede salirse con ciertas ambigüedades locales es que otras ambigüedades son suprimidas por diversos mecanismos. El inglés usa el número y el orden de las palabras, con vestigios de un sistema de casos en los pronombres: "El hombre miró a los hombres y le devolvieron la mirada". Está perfectamente claro en esa oración quién está haciendo qué a quién. Del mismo modo, Perl tiene marcadores de números en sus sustantivos; es decir, $dog es un pooch, y @dog es (potencialmente) muchos. Así que $ y @ son un poco como "esto" y "estos" en inglés.

+1

... y veo que respondí esto exactamente de la misma manera hace dos años en http://stackoverflow.com/questions/1091634/why-do-perl-variables-need-to-start-with – ysth

+0

Sigils have not cambiado ;) – DavidO

+0

@David O, tengo un twigil, creo que tengo un poco de repuesto – ysth

Cuestiones relacionadas