Este es un tema un tanto controvertido, y supongo que hay tantas opiniones como programadores. Pero en aras de eso, quiero saber cuáles son las prácticas comunes en los negocios (o en sus lugares de trabajo).
En mi lugar de trabajo tenemos unas estrictas pautas de codificación. Una sección de eso está dedicada a cadenas / números mágicos. Establece (para C #):
No use valores literales, ya sean numéricos o de cadenas, en su código que no sea para definir constantes simbólicas. Use el siguiente patrón para definir constantes:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Hay excepciones: los valores 0, 1 y nulo casi siempre se pueden usar de forma segura. Muy a menudo, los valores 2 y -1 también están bien. Las cadenas destinadas al registro o al rastreo están exentas de esta regla. Los literales están permitidos cuando su significado es claro por el contexto, y no están sujetos a cambios futuros.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
Una situación ideal sería algún documento de investigación oficial que muestre los efectos sobre la legibilidad / mantenibilidad del código cuando:
- Los números / cuerdas mágicas están por todas partes
- Las cadenas / números mágicos se reemplazan por declaraciones constantes razonablemente (o en diferentes grados de cobertura), y por favor no me griten por usar "razonablemente", sé que todos tienen una idea diferente de lo que es "razonablemente"
- Las cadenas / números mágicos se reemplazan en exceso y en lugares donde no tendrían que estar (vea mi ejemplo a continuación)
Me gustaría hacer esto para tener algunos argumentos con base científica cuando discuta con uno de mis colegas, quien va al punto de declarar constantes como:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
Otro ejemplo sería (y este está en JavaScript):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
¿Pega ID de DOM encima de su archivo javascript si esa ID se usa solo en 1 lugar?
He leído los siguientes temas:
StackExchange
StackOverflow
Bytes IT Community
Hay muchos más artículos, y después de leerlos, surgen algunos patrones.
Entonces, mi pregunta es ¿debería usar cadenas y números mágicos en nuestro código? Estoy buscando específicamente respuestas de expertos que estén respaldadas por referencias si es posible.
NumberTen = 10
Eso no tiene sentido ya que el número 10 no será redefinido. MaxRetryCount = 10
Eso tiene un punto a que podemos querer cambiar el recuento máximo de reintentos. private const char SemiColon = ';';
Tonto. private const char LineTerminator = ';'
; Inteligente.