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.
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.
Respostas:
A concha Bourne ou seu antecessor provavelmente foi a origem da convenção. Os shells tendem a usar $foo
para 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 FOO
e 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 NF
th) campo).
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.
$
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.
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.)
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?