Este é um tópico um tanto controverso, e acho que existem tantas opiniões quanto programadores. Mas, para o efeito, quero saber quais são as práticas comuns nos negócios (ou nos seus locais de trabalho).
No meu local de trabalho, temos diretrizes rígidas de codificação. Uma seção é dedicada a seqüências / números mágicos. Ele afirma (para C #):
Não use valores literais, numéricos ou seqüências de caracteres, em seu código, exceto para definir constantes simbólicas. Use o seguinte padrão para definir constantes:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Há exceções: os valores 0, 1 e nulo quase sempre podem ser usados com segurança. Muitas vezes, os valores 2 e -1 também são bons. As seqüências destinadas ao log ou rastreio estão isentas desta regra. Literais são permitidos quando seu significado é claro a partir do contexto e não estão sujeitos a mudanças futuras.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
Uma situação ideal seria algum trabalho de pesquisa oficial mostrando efeitos sobre a legibilidade / manutenção do código quando:
- Números / cordas mágicos estão por todo o lado
- Cordas / números mágicos são substituídos por declarações constantes razoavelmente (ou em diferentes graus de cobertura) - e não grite comigo por usar "razoavelmente", eu sei que todo mundo tem uma idéia diferente do que "razoavelmente" é
- Cordas / números mágicos são substituídos em excesso e em lugares onde eles não precisariam estar (veja meu exemplo abaixo)
Eu gostaria de fazer isso para ter alguns argumentos científicos ao discutir com um de meus colegas, que está indo ao ponto de declarar constantes como:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
Outro exemplo seria (e este está em JavaScript):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
Você coloca IDs de DOM em cima do seu arquivo javascript se esse ID for usado apenas em um só lugar?
Li os seguintes tópicos:
StackExchange
StackOverflow
Bytes Comunidade de TI
Há muitos mais artigos e, após a leitura desses padrões, surgem alguns padrões.
Então, minha pergunta é: devemos usar cordas e números mágicos em nosso código? Estou procurando especificamente respostas de especialistas que sejam apoiadas por referências, se possível.
NumberTen = 10
Isso é inútil, pois o número 10 não será redefinido. MaxRetryCount = 10
Isso tem um ponto a: podemos querer alterar a contagem máxima de novas tentativas. private const char SemiColon = ';';
Burro. private const char LineTerminator = ';'
; Inteligente.