- Chiamate di metodo o funzione che non fanno nulla di valore.
Non necessariamente male. I metodi in una classe base spesso chiamano metodi vuoti intesi come punti di sostituzione per le sottoclassi. Esempio: UIView di Cocoa Touch ha un -didAddSubview:
metodo documentato come non fare nulla nella versione predefinita. Il -addSubview:
metodo di UIView deve chiamare -didAddSubview:
anche se non fa nulla perché le sottoclassi possono implementarlo per fare qualcosa. I metodi che non fanno nulla e le relative motivazioni dovrebbero essere documentati, ovviamente.
Se una funzione / metodo vuoto o inutile è ovviamente lì per ragioni storiche, dovrebbe essere escesso. Dai un'occhiata alle versioni precedenti del codice nel repository del codice sorgente se non sei sicuro.
- Controlli ridondanti eseguiti in un file di classe, oggetto o metodo separato.
Difficile dire se va bene senza un certo contesto. Se i controlli vengono eseguiti chiaramente per lo stesso motivo, ciò può significare che non esiste una chiara separazione delle responsabilità e si richiede un refactoring, specialmente quando entrambi i controlli comportano lo stesso intervento. Se l'azione risultante da entrambi i controlli non è la stessa, probabilmente i due controlli vengono eseguiti per motivi diversi anche se la condizione è la stessa, e probabilmente va bene.
- se dichiarazioni che valutano sempre come vere.
C'è una grande differenza tra:
if (1) {
// ...
}
e:
if (foo() == true) {
// ...
}
dove foo()
capita di tornare sempre true
.
Il primo caso accade molto quando le persone eseguono il debug. E 'facile da usare un if (0) {...
rimuovere temporaneamente un pezzo di codice mentre si sta cercando di isolare un bug, e quindi modificare il 0
per 1
ripristinare quel codice. L' if
dovrebbero essere rimossi una volta che il gioco è fatto, naturalmente, ma è facile dimenticare quel passo, o di perdere uno o due se avete fatto in più punti. (È una buona idea identificare tali condizionali con un commento che puoi cercare in seguito.) L'unico danno è la confusione che potrebbe causare in futuro; se il compilatore può determinare il valore della condizione al momento della compilazione, lo rimuoverà completamente.
Il secondo caso può essere accettabile. Se la condizione rappresentata foo()
deve essere testata da diversi punti del codice, il factoring in una funzione o un metodo separato è spesso la cosa giusta da fare anche se foo()
sembra essere sempre vero in questo momento. Se è concepibile che foo()
alla fine potrebbe tornare false
, isolare quella condizione in un metodo o una funzione è un modo per identificare tutti i luoghi in cui il codice si basa su quella condizione. Tuttavia , ciò comporta il rischio che la foo() == false
condizione non venga testata e che possa causare problemi in un secondo momento; la soluzione è assicurarsi di aggiungere unit test che testano esplicitamente il false
caso.
- Discussioni che si staccano e non fanno nulla di interessante.
Sembra un artefatto della storia e qualcosa che potrebbe essere identificato durante una revisione del codice o attraverso la profilazione periodica del software. Suppongo che potrebbe essere creato intenzionalmente, ma ho difficoltà a immaginare che qualcuno lo farebbe apposta.
if (false) {...}
i blocchi sono ottimi per commentare il codice! </