Di recente ho scoperto Design by Contract (DbC) e lo trovo un modo estremamente interessante per scrivere codice. Tra l'altro, sembrerebbe offrire:
- Migliore documentazione. Poiché il contratto è la documentazione, è impossibile che uno non sia aggiornato. Inoltre, poiché il contratto specifica esattamente cosa fa una routine, aiuta a supportare il riutilizzo.
- Debug più semplice. Poiché l'esecuzione del programma si interrompe nel momento in cui un contratto fallisce, gli errori non possono propagarsi e la presunta violazione violata verrà presumibilmente evidenziata. Questo offre supporto durante lo sviluppo e durante la manutenzione.
- Migliore analisi statica. DbC è fondamentalmente solo un'implementazione della logica Hoare e dovrebbero applicare gli stessi principi.
I costi, a confronto, sembrano essere piuttosto piccoli:
- Digitazione extra delle dita. Dal momento che i contratti devono essere precisati.
- Prende una certa quantità di formazione per mettersi a proprio agio con la scrittura di contratti.
Ora, avendo familiarità con Python principalmente, mi rendo conto che in realtà è possibile scrivere precondizioni (solo lanciando eccezioni per input inappropriati) ed è persino possibile usare asserzioni per testare nuovamente alcune postcondizioni. Ma non è possibile simulare alcune funzionalità come "vecchio" o "risultato" senza qualche magia aggiuntiva che alla fine sarebbe considerata non-pitonica. (Inoltre, ci sono alcune librerie che offrono supporto, ma alla fine ho l'atmosfera che sarebbe sbagliato usarle, come la maggior parte degli sviluppatori non.) Presumo che sia un problema simile per tutte le altre lingue (tranne ovviamente , Eiffel).
La mia intuizione mi dice che la mancanza di supporto deve essere il risultato di un qualche tipo di rifiuto della pratica, ma la ricerca online non è stata fruttuosa. Mi chiedo se qualcuno può chiarire perché la maggior parte delle lingue moderne sembrano offrire così poco supporto? DbC è difettoso o eccessivamente costoso? O è semplicemente obsoleto a causa della programmazione estrema e di altre metodologie?