Negli ultimi due mesi mi sono tuffato nello standard di codifica IfSQ . Come parte di questo standard IfSQ, una regola è di non utilizzare Magic Numbers
. Anche se non ho problemi a costruire questa regola in assegni come FxCop o StyleCop, sono confuso su cosa sia effettivamente un numero magico.
Secondo Wikipedia ci sono 3 spiegazioni di numeri magici:
- Un valore numerico o di testo costante utilizzato per identificare un formato o protocollo di file;
- Valori unici distintivi che difficilmente verranno scambiati per altri significati (ad es. identificatori globalmente univoci);
- Valori univoci con significato non spiegato o ricorrenze multiple che potrebbero (preferibilmente) essere sostituite con costanti denominate.
Mi sto concentrando sul terzo significato. Ma questo è anche il punto in cui sono bloccato. Vedendo come sto cercando di costruire questo in una regola FxCop; il controllo deve essere automatizzato. Ma quale bandiera suppongo sia il numero magico?
Lo standard IfSQ spiega quanto segue come numeri magici: Numeric literals (other than 0 or 1) have been embedded directly into the source code. For example "34" or "86400".
Ma questo non mi sembra affatto buono. Ciò significherebbe che dovrei segnalare ogni singola occorrenza di un numero diverso da 0 e 1. Numeri come 24 (ore), 60 (minuti) e 100 (percentuale) sono, nel loro contesto corretto, nessun numero magico; nei miei occhi, cioè.
Perché questo sarà un controllo automatico, non è possibile guardare dalle cose in modo contestuale.
Sulla base di questo ho le seguenti domande:
- Come dovrei definire un numero magico?
- È possibile definire numeri magici senza contesto?
- Devo saltare determinate istruzioni quando controllo i numeri magici?