Ocasionalmente, o nome mais lógico para algo (por exemplo, uma variável) é uma palavra-chave reservada no idioma ou ambiente de sua escolha. Quando não há sinônimo igualmente apropriado, como alguém o denomina?
Imagino que haja heurísticas de práticas recomendadas para esse problema. Eles podem ser fornecidos pelos criadores ou governadores de linguagens e ambientes de programação. Por exemplo, se python.org (ou Guido van Rossum) disser como lidar com isso em Python, isso seria uma boa orientação no meu livro. Um link do MSDN sobre como lidar com isso em c # também seria bom.
Como alternativa, as diretrizes fornecidas pelos principais influenciadores da engenharia de software também devem ser valiosas. Talvez o Google / Alphabet tenha um bom guia de estilo que nos ensine como lidar com isso?
Aqui está apenas um exemplo: na linguagem C #, "padrão" é uma palavra-chave reservada. Quando eu uso uma enumeração, gostaria de nomear o valor padrão "default" (análogo às instruções "switch"), mas não posso.
(C # faz distinção entre maiúsculas e minúsculas e as constantes enum devem estar em maiúsculas, portanto "Padrão" é a escolha óbvia aqui, mas vamos assumir que nosso guia de estilo atual determina que todas as constantes enum devem estar em minúsculas.)
Poderíamos considerar a palavra "defaultus ", mas isso não segue o princípio da menor surpresa . Também devemos considerar "padrão" e "inicial", mas infelizmente "padrão" é a palavra que transmite exatamente seu propósito nessa situação.
clazz
é praticamente um padrão de fato. É, essencialmente, é parte da convenção de nomenclatura plataforma. Fazer qualquer outra coisa seria uma violação das expectativas de que outros possam ter lido seu código, portanto, isso só deve ser feito se for absolutamente necessário.Respostas:
Para uma opção de enumeração, você deve usar maiúsculas e minúsculas
Default
. Como o C # diferencia maiúsculas de minúsculas, ele não colide com a palavra-chave reservada. Consulte Diretrizes de nomenclatura .net .Como todos os membros públicos devem estar em maiúsculas em .net e todos os nomes reservados em minúsculas, você realmente não deve encontrar isso, exceto com variáveis locais (incluindo parâmetros). E os locais normalmente têm nomes ou frases como nomes, portanto, é muito raro o nome mais natural colidir com uma palavra-chave. Por exemplo.
defaultValue
normalmente seria um nome mais natural quedefault
. Portanto, na prática, isso não é um grande problema.Em C #, você pode usar o
@
prefixo " " para escapar das palavras-chave reservadas, para que possam ser usadas como identificadores (como@default
). Mas isso só deve ser usado se você realmente não tiver outra opção, ou seja, se estiver fazendo interface com uma biblioteca de terceiros que usa palavras-chave reservadas como identificador.É claro que outros idiomas têm sintaxe e palavras-chave diferentes e, portanto, soluções diferentes para esse problema.
SQL tem muitas palavras-chave, mas é muito comum simplesmente escapar de identificadores, como
[Table]
. Alguns até o fazem para todos os identificadores, independentemente de colidirem com uma palavra-chave ou não. (Afinal, uma palavra-chave conflitante pode ser introduzida no futuro!)O Powershell (e várias outras linguagens de script) prefixa todas as variáveis com um sigil como $, o que significa que elas nunca colidirão com palavras-chave.
O Lisp não possui palavras-chave, pelo menos não no sentido convencional.
O Python tem uma convenção oficialmente reconhecida no PEP-8 :
Algumas línguas, como Brainfuck ou Whitespace, evitam definir palavras, evitando o problema de maneira elegante.
Em suma, não há resposta independente da linguagem para sua pergunta, pois ela depende muito da sintaxe e das convenções da linguagem específica.
fonte
#define
, mas o operando do lado direito sempre seria interpretado como um identificador que diferencia maiúsculas de minúsculas. Isso permitiria resolver muitos tipos de conflitos de nomenclatura (incluindo, para idiomas que não diferenciam maiúsculas de minúsculas, a importação de símbolos idênticos, exceto para maiúsculas e minúsculas).Eu acrescentaria um sublinhado (padrão_)
Prós:
Por que não gosto de outras soluções:
Sinônimo:
Anexando / anexando uma palavra:
Mudança de letras (clazz em vez de classe):
Anexando um número (padrão1):
Anexando / anexando uma carta:
Escapando uma palavra-chave (@default (c #), `default` (scala))
Quando eu não o usaria:
fonte
klass
-se uma variável em queclass
é uma palavra reservada. Eu nunca vi,defawlt
mas é a mesma ideia. Eu prefeririadefault_
(e provavelmente,class_
se não for atropelado, por qualquer convenção estabelecida)."Padrão" provavelmente não é um valor de enumeração útil. Representa um comportamento que pode mudar dependendo do contexto em que é usado.
Dito isto, se o seu idioma diferencia maiúsculas de minúsculas, use um caso diferente para a palavra. (Padrão x padrão)
Ou, melhor ainda, faça um esforço extra para digitar mais algumas letras e chamá-lo DefaultValue.
fonte
enum ErrorHandlingLevel { Default = 0, ... }
vsenum ErrorHandlingLevel { None = 0, ... }
. No segundo exemplo, o fato deNone
ser o padrão pode ser conhecido ao definir o valor da enumeração como 0, usando xmldoc ou explicitamente no código. Você obtém o benefício adicional de saber o que significa quando um objeto estáErrorHandlingLevel
definidoNone
. Compare isso com a inspeção de um objeto comErrorHandlingLevel
definido como padrão.Eu recomendo NÃO mudar a convenção de nomenclatura localmente (ou adicionar caracteres sem sentido) com o objetivo de desambiguar (como foi sugerido em outras postagens). Isso cria confusão se a intenção não é óbvia e pode levantar questões sobre por que foi nomeado dessa maneira. Pode ser resolvido sem ele.
Em todos os casos, deve ser possível usar uma palavra com significado sinônimo ou tornar o nome mais específico (ou até detalhado). Mesmo quando pode introduzir repetição de contexto, pode ser uma solução melhor.
Por exemplo, digamos que você tenha uma enumeração
Mode
que exponha um valor padrão, como no seu caso. Nomeardefault_mode
pode não parecer o melhor devido à repetição, mas evita ambiguidade ao transmitir o significado desejado.fonte
Você precisará usar palavras diferentes ou modificadas, isso é claro.
Então isso geralmente significa
Outro fator a determinar é como unir as várias palavras e as opções geralmente são
Minha sugestão é usar um prefixo ou sufixo e sublinhados / traços, por exemplo
local_default
tem a vantagem de que todos os locais estão alinhados e, assim, se destacam rapidamente, mas a desvantagem de que você sempre deve ler a segunda parte para obter o nome exclusivo.default_local
tem a vantagem inversa de que o nome exclusivo da variável é visto rapidamente, mas os locais nem sempre são tão facilmente agrupados visualmente.Alguns exemplos para a abordagem específica de domínio que já vi são: em
vehicle_model
vez demodel
uma palavra reservada;room_table
para uma tabela SQL, comotable
é uma palavra reservada.As outras duas opções que vi idiomas ou scripts são:
fonte
words_with_underscores-or-dashes
dois nomes -snake_case
ao usar o sublinhado ekebab-case
ao usar o traço. Achei o último engraçado.Obviamente, faça o que puder para evitar essa situação. Escrevo software desde o final da década de 1970 e as vezes em que realmente tive que falsificar uma palavra reservada têm menos de dez anos, provavelmente mais perto das cinco.
Você pode fazer muitas coisas, como dobrar a primeira ou a última letra (
reservedd
) ou adicionar um sublinhado à esquerda ou à direita (reserved_
). O que é apropriado dependerá muito do idioma usado pelas convenções que você está escrevendo, especialmente no que diz respeito aos sublinhados iniciais ou finais. Além disso, tente não fazer coisas com casos que possam ser mal interpretados por humanos (por exemplo, usarReserved
quando for diferentereserved
).Depois de escolher algo, coloque-o em suas diretrizes de codificação, verifique se as pessoas o conhecem e se ele é usado de forma consistente. Chego até a acrescentar um comentário para que os leitores não pensem que é um erro de digitação e saibam que o verão novamente:
fonte
classs
?)Em C #, você pode acrescentar o nome de um identificador com @ . Isso diz ao compilador para tratar o nome como o nome de um identificador e não como uma possível palavra-chave.
fonte