La programmazione riguarda il lavoro
Penso che il modo più semplice per rispondere a questo sia capire i progressi che OOP ha fatto nel corso degli anni. Tutto ciò che viene fatto in OOP (e la maggior parte dei paradigmi di programmazione, per quella materia) è modellato sulla necessità di lavorare .
Ogni volta che viene chiamato un metodo, il chiamante dice "Non so come fare questo lavoro, ma tu sai come, quindi lo fai per me".
Ciò presentava una difficoltà: cosa succede quando il metodo chiamato generalmente sa come fare il lavoro, ma non sempre? Avevamo bisogno di un modo per comunicare "Volevo aiutarti, davvero, ma non posso proprio farlo."
Una metodologia iniziale per comunicare ciò consisteva semplicemente nel restituire un valore "immondizia". Forse ti aspetti un numero intero positivo, quindi il metodo chiamato restituisce un numero negativo. Un altro modo per ottenere ciò era impostare un valore di errore da qualche parte. Sfortunatamente, in entrambi i modi il codice kosher mi ha permesso di controllare qui tutto per assicurarmi di controllare tutto . Man mano che le cose diventano più complicate, questo sistema cade a pezzi.
Un'analogia eccezionale
Supponiamo che tu abbia un falegname, un idraulico e un elettricista. Vuoi un idraulico per sistemare il lavandino, quindi lui lo guarda. Non è molto utile se dice solo a te: "Mi dispiace, non posso ripararlo. È rotto." Diavolo, è ancora peggio se dovesse dare un'occhiata, andarsene e spedirti una lettera dicendo che non poteva aggiustarlo. Ora devi controllare la tua posta prima ancora di sapere che non ha fatto quello che volevi.
Quello che preferiresti è che ti dica "Guarda, non sono riuscito a ripararlo perché sembra che la tua pompa non funzioni".
Con queste informazioni, puoi concludere che desideri che l'elettricista dia un'occhiata al problema. Forse l'elettricista troverà qualcosa di simile al carpentiere e dovrai far riparare il carpentiere.
Cavolo, potresti non sapere nemmeno di aver bisogno di un elettricista, potresti non sapere di chi hai bisogno. Sei solo un intermediario in un'impresa di riparazioni domestiche e la tua attenzione è l'idraulica. Quindi dite Non Sei capo del problema, e poi si dice l'elettricista per risolvere il problema.
Questo è ciò che le eccezioni stanno modellando: modalità di fallimento complesse in modo disaccoppiato. L'idraulico non ha bisogno di sapere dell'elettricista, non ha nemmeno bisogno di sapere che qualcuno nella catena può risolvere il problema. Riferisce solo sul problema che ha riscontrato.
Quindi ... un anti-pattern?
Ok, quindi capire il punto delle eccezioni è il primo passo. Il prossimo è capire cos'è un anti-pattern.
Per qualificarsi come anti-modello, è necessario
- risolvere il problema
- hanno conseguenze decisamente negative
Il primo punto è facilmente soddisfatto: il sistema ha funzionato, giusto?
Il secondo punto è più appiccicoso. Il motivo principale per l'utilizzo delle eccezioni come flusso di controllo normale è negativo perché non è questo il loro scopo. Ogni data funzionalità di un programma dovrebbe avere uno scopo relativamente chiaro e la cooptazione di tale scopo porta a una confusione non necessaria.
Ma questo non è un danno definitivo . È un modo scarso di fare le cose, e strano, ma un anti-schema? No. Solo ... strano.