Sigil (programação de computador) - Sigil (computer programming)

Em programação de computador , um sigilo ( / s ɪ əl / ) é um símbolo afixado a uma variável de nome, mostrando a variável de tipo de dados ou alcance , normalmente um prefixo, como em $foo , onde $ é o sigilo.

Sigilo , do latim sigillum , que significa um "pequeno sinal", significa um sinal ou imagem supostamente com poder mágico . Sigils podem ser usados ​​para separar e demarcar namespaces que possuem diferentes propriedades ou comportamentos.

Contexto histórico

O uso de sigilos foi popularizado pela linguagem de programação BASIC . O exemplo mais conhecido de um sigilo em BASIC é o cifrão (" $ ") anexado aos nomes de todas as strings . Muitos dialetos do BASIC usam outros sigilos (como " % ") para denotar números inteiros e números de ponto flutuante e sua precisão, e às vezes outros tipos também.

Larry Wall adotou o uso de sigilos do shell scripting para sua linguagem de programação Perl . Em Perl, os sigilos não especificam tipos de dados refinados como strings e inteiros, mas as categorias mais gerais de escalares (usando um prefixo " $ "), matrizes (usando " @ "), hashes (usando " % ") e sub - rotinas (usando " & "). Raku também usa sigilos secundários, ou twigils , para indicar o escopo das variáveis. Exemplos proeminentes de twigils em Raku incluem " ^ ", usado com parâmetros formais autodeclarados ("variáveis ​​de espaço reservado") e " . ", usado com acessadores de atributo de objeto (isto é, variáveis ​​de instância).

No CLIPS , as variáveis ​​escalares são prefixadas com um ? sigilo " ", enquanto as variáveis ​​de múltiplos campos (por exemplo, uma lista de 1 nível) são prefixadas com " $? ".

No Common Lisp , as variáveis ​​especiais (com escopo dinâmico) são normalmente cercadas com o * que é apelidado de " convenção de proteção para os ouvidos ". Embora seja apenas uma convenção, e não aplicada, a própria linguagem adota a prática (por exemplo, * saída padrão *). Da mesma forma, alguns programadores envolvem constantes com + .

No CycL , as variáveis ​​são prefixadas com um ? sigilo " ". Da mesma forma, os nomes de constantes são prefixados com " #$ " (pronuncia-se "dólar hash").

No Elixir , os sigilos de string são fornecidos por meio do ~ símbolo " ".

No MAPPER (também conhecido como BIS), as variáveis ​​nomeadas são prefixadas com "<" e sufixadas com ">" porque strings ou valores de caracteres não requerem aspas.

No script mIRC , os identificadores têm um $ sigilo " ", enquanto todas as variáveis ​​têm um % prefixo " " (independentemente das variáveis ​​locais ou globais ou do tipo de dados). Variáveis ​​binárias são prefixadas por um " & ".

Na linguagem de programação MUMPS , " $ " precede nomes de funções intrínsecas e 'nomes de variáveis ​​especiais' (variáveis ​​integradas para acessar o estado de execução). " $Z " precede nomes de função intrínseca não padrão. " $$ " precede os nomes das funções extrínsecas. Rotinas (usadas para procedimentos, sub-rotinas, funções) e variáveis ​​globais (armazenamento de banco de dados) são prefixadas por um acento circunflexo (^). A última subárvore de variável global pode ser referenciada indiretamente por um circunflexo e o último subscrito; isso é conhecido como uma "referência simples". Rotinas de todo o sistema e variáveis ​​globais (armazenadas em certos bancos de dados compartilhados) são prefixadas com ^%; estes são referidos como "rotinas percentuais" e "globais percentuais".

Em Objective-C , literais de string precedidos de " @ " são instâncias do tipo de objeto NSString ou, desde o clang v3.1 / LLVM v4.0 NSNumber , NSArray ou NSDictionary . O prefixo @ também é usado nas palavras-chave interface , implementation e end para expressar a estrutura de definições de classe. Também dentro das declarações e definições de classe, um prefixo de - é usado para indicar métodos e variáveis ​​de membro, enquanto prefixo + indica elementos de classe.

Na linguagem PHP , que foi amplamente inspirada em Perl, " $ " precede qualquer nome de variável . Os nomes não prefixados por this são considerados constantes , funções ou nomes de classe (ou nomes de interface ou característica, que compartilham o mesmo namespace que as classes).

O PILOT usa " $ " para buffers (variáveis ​​de string), " # " para variáveis ​​inteiras e " * " para rótulos de programa.

Python usa um @ prefixo " ", chamado sintaxe de pizza , para a aplicação de decoradores e um __ prefixo " ", chamado dunder , para atributos "privados" .

Em Ruby , variáveis ​​comuns não têm sigilos, mas " $ " é prefixado para variáveis ​​globais , " @ " é prefixado para variáveis ​​de instância e " @@ " é prefixado para variáveis ​​de classe . Ruby também usa sigilos de sufixo (estritamente convencionais): " ? " indica um método de predicado que retorna (normalmente) um valor booleano ; e " ! " indica que o método pode ter um efeito potencialmente inesperado e precisa ser manuseado com cuidado.

Em Scheme , por convenção, os nomes dos procedimentos que sempre retornam um valor booleano geralmente terminam em " ? ". Da mesma forma, os nomes dos procedimentos que armazenam valores em partes de objetos Scheme previamente alocados (como pares, vetores ou strings) geralmente terminam em " ! ".

O ML padrão usa o prefixo sigilo " ' " em uma variável que se refere a um tipo. Se o sigilo for duplicado, ele se refere a um tipo para o qual a igualdade é definida. O ' caractere " " também pode aparecer dentro ou no final de uma variável, caso em que não tem nenhum significado especial.

No Transact-SQL , " @ " precede uma variável local ou nome de parâmetro. As variáveis ​​do sistema (conhecidas como variáveis ​​globais) são diferenciadas por um @@ prefixo " ".

No Windows PowerShell , que foi parcialmente inspirado por shells Unix e Perl, os nomes das variáveis ​​são prefixados pelo $ sigilo " ".

Em XSLT , variáveis ​​e parâmetros têm um $ sigilo inicial " " no uso, embora quando definido em <xsl:param> ou <xsl:variable> com o name atributo " ", o sigilo não é incluído. Relacionado ao XSLT, o XQuery usa a $ forma de sigilo " " tanto na definição quanto no uso.

No MEL , os nomes das variáveis ​​são prefixados por " $ " para distingui-los de funções, comandos e outros identificadores.

Fenômenos semelhantes

Variáveis ​​de script de shell

Em scripts de shell Unix e em utilitários como Makefiles , o " $ " é um operador unário que traduz o nome de uma variável em seu conteúdo. Embora possa parecer semelhante a um sigilo, é propriamente um operador unário para indireção lexical , semelhante ao * operador de desreferência para ponteiros em C , como perceptível pelo fato de que o cifrão é omitido ao atribuir a uma variável.

Convenções de identificador

Em Fortran , sigilos não são usados, mas todas as variáveis ​​que começam com as letras I, J, K, L, M e N são inteiros por padrão. A documentação do Fortran se refere a isso como "tipagem implícita", embora a tipagem explícita esteja sempre disponível para permitir que qualquer variável seja declarada com qualquer tipo. (A escolha do intervalo I – N está em conformidade com as convenções de nomenclatura matemática tradicionais .)

Várias linguagens de programação, incluindo Prolog , Haskell , Ruby e Go tratam identificadores que começam com uma letra maiúscula de forma diferente de identificadores que começam com uma letra minúscula, uma prática relacionada ao uso de sigilos.

Stropping

Na verdade, uma forma de redução , o uso de várias linguagens na infraestrutura de linguagem comum (CLI) da Microsoft .NET requer uma maneira de usar variáveis ​​em uma linguagem diferente que podem ser palavras-chave em uma linguagem de chamada. Isso às vezes é feito por prefixos. Em C # , qualquer nome de variável pode ser prefixado com " ". Isso é usado principalmente para permitir o uso de nomes de variáveis ​​que, de outra forma, entrariam em conflito com palavras-chave. O mesmo é obtido no VB.Net colocando o nome entre colchetes, como em . @[end]

O @ prefixo " " também pode ser aplicado a literais de string; veja afixos literais abaixo.

Notação húngara

Relacionada aos sigilos está a notação húngara , uma convenção de nomenclatura para variáveis ​​que especifica o tipo de variável anexando certos prefixos alfabéticos ao nome da variável. Ao contrário dos sigilos, no entanto, a notação húngara não fornece nenhuma informação ao compilador; como tal, os tipos explícitos devem ser especificados de forma redundante para as variáveis ​​(a menos que use uma linguagem com inferência de tipo ). Como a maioria dos compiladores padrão não impõe o uso dos prefixos, isso permite a omissão e também torna o código sujeito a confusão devido ao uso incorreto acidental.

Afixos literais

Enquanto os sigilos são aplicados a nomes (identificadores), prefixos e sufixos semelhantes podem ser aplicados a literais , notavelmente literais inteiros e literais de string , especificando como o literal deve ser avaliado ou que tipo de dados ele é. Por exemplo, 0x10ULL avalia o valor 16 como um inteiro longo sem sinal em C ++: o 0x prefixo indica hexadecimal, enquanto o sufixo ULL indica longo sem sinal. Da mesma forma, os prefixos são freqüentemente usados ​​para indicar uma string bruta , como r"C:\Windows" em Python, que representa a string com valor C:\Windows ; como uma string de escape, isso seria escrito como "C:\\Windows" .

Como isso afeta a semântica (valor) de um literal, ao invés da sintaxe ou semântica de um identificador (nome), isso não é nem stropping (sintaxe do identificador) nem um sigilo (semântica do identificador), mas é sintaticamente semelhante.

Anotações Java

Compare anotações Java como @Override e @Deprecated.

Confusão

Em alguns casos, a mesma sintaxe pode ser usada para finalidades distintas, o que pode causar confusão. Por exemplo, em C # , o @ prefixo " " pode ser usado para stropping (para permitir que palavras reservadas sejam usadas como identificadores) ou como um prefixo para um literal (para indicar uma string bruta ); neste caso, nenhum dos usos é um sigilo, pois afeta a sintaxe dos identificadores ou a semântica dos literais, não a semântica dos identificadores.

Veja também

Referências