Il vertice di ciò a cui le altre risposte hanno afferrato, non è che i "valori magici" siano cattivi, ma che dovrebbero essere:
- definito riconoscibilmente come costanti;
- definito solo una volta all'interno del loro intero dominio di utilizzo (se possibile dal punto di vista dell'architettura);
- definiti insieme se formano un insieme di costanti che sono in qualche modo correlate;
- definito ad un livello appropriato di generalità nell'applicazione in cui sono utilizzati; e
- definito in modo tale da limitare il loro utilizzo in contesti inappropriati (ad esempio, è possibile il controllo del tipo).
Ciò che in genere distingue le "costanti" accettabili dai "valori magici" è una violazione di una o più di queste regole.
Usati bene, le costanti ci permettono semplicemente di esprimere certi assiomi del nostro codice.
Il che mi porta ad un punto finale, che un uso eccessivo di costanti (e quindi un numero eccessivo di ipotesi o vincoli espressi in termini di valori), anche se altrimenti rispetta i criteri sopra (ma soprattutto se si discosta da loro), può implicare che la soluzione che viene escogitata non sia sufficientemente generale o ben strutturata (e quindi non stiamo parlando dei pro e dei contro delle costanti, ma dei pro e dei contro di un codice ben strutturato).
I linguaggi di alto livello hanno costrutti per modelli in linguaggi di livello inferiore che dovrebbero impiegare costanti. Gli stessi pattern possono anche essere usati nella lingua di livello superiore, ma non dovrebbe essere.
Ma quello può essere un giudizio esperto basato sull'impressione di tutte le circostanze e su quale dovrebbe essere la soluzione, e esattamente come quel giudizio sarà giustificato dipenderà pesantemente dal contesto. In effetti, potrebbe non essere giustificabile in termini di qualsiasi principio generale, se non per affermare "Sono abbastanza vecchio per aver già visto questo tipo di lavoro, con il quale mi è familiare, fatto meglio"!
EDIT: avendo accettato una modifica, ne ho rifiutata un'altra e ora ho eseguito la mia modifica personale, posso ora considerare lo stile di formattazione e punteggiatura della mia lista di regole da regolare una volta per tutte haha !