Por que $ está nos nomes dos identificadores para tantos idiomas?


15

Muitas linguagens de script como Perl, Awk, Bash, PHP etc. usam um sinal de $ antes dos nomes dos identificadores. Eu tentei descobrir o porquê, mas nunca tive uma resposta satisfatória.


10
Possivelmente por causa do último passo nos planos de negócios da maioria dos programadores - ... lucro!
Oded

2

Respostas:


4

A concha Bourne ou seu antecessor provavelmente foi a origem da convenção. Os shells tendem a usar $foopara se referir a uma variável de shell ou variável de ambiente, enquanto just fooé considerado uma string literal (que pode ser um nome de comando, um nome de arquivo ou apenas uma palavra a ser passada para outro comando).

Provavelmente é uma questão de minimizar o quanto você precisa digitar. Na maioria das linguagens de programação, a maior parte do que você digita serão palavras-chave (de um pequeno conjunto fixo) e nomes de itens que foram declarados; faz sentido usar apenas um nome para eles. Os literais de sequência são colocados entre aspas (simples ou duplas) para distingui-los sintaticamente.

Em um shell interativo, a maioria das coisas que você digita serão nomes de comandos e arquivos, portanto, ter um formato não decorado para eles faz sentido. Os nomes de variáveis ​​não são usados ​​com tanta frequência, portanto, precedendo-os com$ é uma maneira simples de distingui-los.

A trilha $ trilha que alguns BASICs usam para variáveis ​​de string (ao contrário de variáveis ​​numéricas) provavelmente foi também uma inspiração.

A escolha de Perl de usar $para variáveis ​​escalares foi indubitavelmente inspirada por shells como o shell Bourne, e as primeiras versões do Perl geralmente tratavam as palavras de baralho como literais de string ( print FOOe print "FOO"eram equivalentes). Esse uso de palavras de barras foi preterido nas versões mais modernas do Perl, mas os sigilos permanecem e são usados ​​principalmente para distinguir tipos diferentes de variáveis. Talvez se o Perl estivesse sendo projetado do zero, as variáveis ​​escalares pudessem ser denotadas por um "sigilo vazio", mas isso não aconteceu.

(BTW, o Awk não usa sigilos. Ele possui uma $sintaxe, mas refere-se aos números dos campos. NFÉ o número de campos; $NFé o último (o NFth) campo).


3
Apenas uma nota de rodapé: Bourne shell (1977) , BASIC (1964) .
Steven Jeuris

14

Um sinal de $ no nome da variável é um caso especial de "Sigil" . Nos primeiros dias do BASIC (mais ou menos em 1964), $ era usado para indicar nomes de variáveis ​​de string. Meu palpite é que, uma vez que torna mais fácil para os compiladores separar nomes de variáveis ​​do restante da gramática usando algum símbolo, e como era comum ao BASIC, seu uso progrediu. No entanto, este não é o único usado.


2
As $strings for (e %para números inteiros) no Basic eram um sufixo e não um prefixo, pelo menos nas variantes (não padrão) às quais fui infligido. Não que isso seja significativo, é claro - o sufixo vs. o prefixo é bastante superficial, pelo menos no que diz respeito aos compiladores e análises lexicais. Pode haver uma pequena diferença em termos de legibilidade.
precisa saber é o seguinte

Entre - um dos motivos pelos quais funcionou no Basic é que havia uma variedade muito limitada de tipos e nenhum tipo definido pelo usuário; portanto, apenas uma faixa muito limitada de sigilos era necessária. O uso de Perl é diferente - embora já tenha sido um longo tempo para mim, então não consigo me lembrar de detalhes.
precisa saber é o seguinte

@ steve314, você está absolutamente correto A $ = ... Obrigado por observar isso.
precisa saber é o seguinte

5

awk?

Às vezes chamado de sigilo , geralmente usado para traduzir os nomes de variáveis ​​(e outros) em valores.


5

Isso parece se originar no BASIC, onde o sufixo $ indica uma variável de sequência e também foi pronunciado como "sequência". Por exemplo, INKEY $ é pronunciado "na cadeia de chaves".

Mas por que o cifrão? Bem, $ se parece um pouco com S para string. E de acordo com a Wikipedia :

Como o cifrão é um dos poucos símbolos que, por um lado, está quase universalmente presente nos conjuntos de caracteres do computador, mas, por outro lado, raramente é necessário em seu significado literal no software, o caractere $ foi usado em computadores. para muitos propósitos, não relacionados ao dinheiro.

(Apropriadamente, por alguns dólares a mais está na televisão enquanto digito isso.)


2

Por que não? É mais fácil escrever um lexer que pode dizer que um identificador será uma variável (e consequentemente mais fácil escrever o analisador), especialmente para uma linguagem interpretada. Quanto ao motivo $, essa é provavelmente a maior parte da tradição - um dos criadores de uma linguagem antiga que utilizava o construto (Bash?


1
Pode não facilitar muito a gravação do lexer e do analisador, mas elimina o requisito de palavras reservadas.
TomG #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.