Questo è un argomento alquanto controverso, e immagino ci siano tante opinioni quanti sono i programmatori. Ma per il gusto di farlo, voglio sapere quali sono le pratiche comuni negli affari (o nei luoghi di lavoro).
Nel mio posto di lavoro abbiamo una rigida guida alla programmazione. Una sezione è dedicata a stringhe / numeri magici. Indica (per C #):
Non usare valori letterali, numerici o di stringhe, nel tuo codice se non per definire costanti simboliche. Utilizzare il modello seguente per definire le costanti:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Ci sono eccezioni: i valori 0, 1 e null possono quasi sempre essere usati in sicurezza. Molto spesso anche i valori 2 e -1 sono OK. Le stringhe destinate alla registrazione o alla traccia sono esenti da questa regola. I letterali sono ammessi quando il loro significato è chiaro dal contesto e non soggetto a cambiamenti futuri.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
Una situazione ideale sarebbe un documento di ricerca ufficiale che mostri effetti sulla leggibilità / manutenibilità del codice quando:
- I numeri / stringhe magici sono ovunque
- Le stringhe / i numeri magici sono sostituiti da costanti dichiarazioni ragionevolmente (o in diversi gradi di copertura) - e per favore non gridarmi per aver usato "ragionevolmente", so che ognuno ha un'idea diversa di cosa sia "ragionevolmente"
- Stringhe / numeri magici sono collocati in eccesso e in luoghi dove non dovrebbero essere (vedi il mio esempio di seguito)
Vorrei fare questo per avere degli argomenti scientificamente basati quando discuto con uno dei miei colleghi, che sta per dichiarare costanti come:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
Un altro esempio potrebbe essere (e questo è in JavaScript):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
Attacchi gli ID DOM sopra il tuo file javascript se quell'ID viene utilizzato solo in 1 posizione?
Ho letto i seguenti argomenti:
StackExchange
StackOverflow
Byte Comunità IT
Ci sono molti altri articoli e dopo aver letto questi emergono alcuni schemi.
Quindi la mia domanda è: usare stringhe e numeri magici nel nostro codice? Sto specificatamente cercando risposte di esperti che sono supportate da riferimenti se possibile.
NumberTen = 10
Questo è inutile in quanto il numero 10 non verrà ridefinito. MaxRetryCount = 10
Questo ha un punto a: potremmo voler cambiare il numero massimo di tentativi. private const char SemiColon = ';';
Dumb. private const char LineTerminator = ';'
; Inteligente.