Perché scrivere troppe dichiarazioni condizionali è considerato una cattiva pratica di programmazione?
Se è l'opzione più efficiente, allora non è una cattiva pratica. Fare qualcosa che ha una soluzione più semplice ed elegante facilmente disponibile, però, è una cattiva pratica.
In questo caso, uno switch gigante può spesso essere sostituito da un'interfaccia o permettendo ad una classe di avere la propria responsabilità, ecc.
Per esempio, se avete qualcosa come questo:
Questo funzionerà. Il codice sarà più o meno robusto finché i valori vengono solo aggiunti e non modificati, e in realtà è anche abbastanza efficiente dato che i confronti tra bit richiedono virtualmente zero tempo. Ma questo andrà fuori controllo, difficile da navigare, e devi già definire queste classi di auto comunque.
Invece, iniziamo con qualcosa come questo:
Ancora una volta, probabilmente avevamo questo in ogni caso, solo senza il metodo numberOfCylinders, e così ora il nostro primo metodo sembra questo:
Ora immaginate per un momento che siamo un negozio nazionale di ricambi auto, e abbiamo letteralmente migliaia di auto di varie marche, modelli, finiture, ecc. Quell'if/else diventerebbe un enorme mostro, impossibile da leggere, estremamente difficile da aggiungere o rimuovere in modo sicuro, ecc.
Così di nuovo, non è sempre una cattiva pratica, e a volte avremo bisogno di un grande interruttore o qualcosa del genere, ma di solito c'è un modo più semplice nascosto lì dentro.
EDIT: Ci sono molti commenti sull'avere un numero estremamente grande di combinazioni di auto (potenzialmente milioni attraverso la storia) e classi che implementano Car fallendo qui. Naturalmente ad un certo punto, le classi non funzioneranno, e dovrai memorizzare file piatti in un database e usare un accessor.
La mia risposta era intesa a mostrare la trappola dell'uso di dichiarazioni condizionali molto lunghe, non come un effettivo tentativo di costruire un'architettura di un negozio di ricambi auto. Se lavorate in un grande rivenditore di auto, per favore non prendete la mia semplice risposta come base della vostra architettura software :)
Articoli simili
- È una cattiva pratica usare iframe nell'estensione Chrome?
- La pratica di Apple di programmare l'obsolescenza nei loro smartphone è una pratica commerciale non etica?
- Qual è la differenza tra le dichiarazioni switch e if else? Qual è meglio in casi diversi? Perché?
- Dove posso ottenere gratuitamente le dichiarazioni finanziarie storiche che vanno indietro di 10-20 anni?