Una delle cose che ho imparato nella programmazione non è che non hai bisogno di istruzioni case, si non si vuole istruzioni case.
Le affermazioni di casi sono il modo per gonfiare un oggetto. Quando lo usi, stai degradando la manutenzione. Avrai tutte le possibilità che vuoi in quel momento, ma il giorno in cui vuoi aggiungere qualcosa dovrai rivedere codice sgradevole quando non ricordi più le sottigliezze nella responsabilità di quell'oggetto, quindi lo gonfierai ancora di più.
A brevissimo termine, sembrano amichevoli, ma le dichiarazioni del caso non sono i tuoi amici. Ti morderanno a lungo termine.
Inoltre rendono il codice meno flessibile. Ad esempio, non è possibile aggiungere un caso con sicurezza al codice precedente. Sei costretto a rivedere il vecchio codice quando non lo ricordi più perché è stato codificato in quel modo.
Le affermazioni di casi sono nemici di un buon codice.
Se si dispone di qualcosa che va oltre ifTrue: ifFalse: quindi la cosa giusta da fare è creare stati per quello. Quindi quello che fai è implementare tre classi che sono molto semplici e tutti comprendono alcuni verbi.
Dire, #doTheNextThing. Quindi, quando l'oggetto riceve il messaggio, delega allo stato (a prescindere da quale di questi 3 (o 30, così si noti che questo ridimensiona la complessità in modo piacevole)) e lo stato sa come far reagire correttamente il ricevitore originale.
Ciò lascerà il codice chiaro, ovvio e altamente mantenibile.Sarai in grado di dimenticarlo perché sai che quando lo guardi di nuovo, tutto è così ovvio che non devi pensare nel passato del tuo codice tanto quanto nel futuro del tuo codice.
Questo è importante perché la memoria è la memoria più costosa che hai e AFAIK non è aggiornabile. Quindi questa tecnica ti permette di fare cose più potenti.
Accanto, fare 3 classi può sembrare più lavoro per alcuni ma non lo è. Ogni noob può aggiungere 3 classi vuote in un battito di ciglia, ma solo l'esperto giusto ricorderà come è stata fatta un'istruzione case nel vecchio codice nel modo in cui è stata creata. E se sei estremamente ottimista, ci vorranno alcuni minuti per ricordarlo, quindi tutti voi sapete cosa fare dopo. Pensaci.
Come principio generale, sono d'accordo. È difficile per me vedere come si possa migliorare, in termini di leggibilità, l'uso di #caseOf di Andreas Raab: altrimenti: in DnsClient (su SqueakSource). –