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.
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).
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.
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.
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?
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 justfoo
é 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
eprint "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 (oNF
th) campo).fonte
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.
fonte
$
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.awk?
Às vezes chamado de sigilo , geralmente usado para traduzir os nomes de variáveis (e outros) em valores.
fonte
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 :
(Apropriadamente, por alguns dólares a mais está na televisão enquanto digito isso.)
fonte
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?fonte