Se dovessi scegliere le tue tecniche preferite (intelligenti) per la codifica difensiva, quali sarebbero? Sebbene le mie lingue attuali siano Java e Objective-C (con un background in C ++), sentiti libero di rispondere in qualsiasi lingua. L'enfasi qui sarebbe sulle tecniche difensive intelligenti diverse da quelle che il 70% + di noi qui già conosce. Quindi ora è il momento di scavare in profondità nella tua borsa di trucchi.
In altre parole, prova a pensare ad altro che a questo esempio poco interessante :
if(5 == x)
anzichéif(x == 5)
: per evitare incarichi non intenzionali
Ecco alcuni esempi di alcuni intriganti migliori pratiche di programmazione difensiva (esempi lingua-specifici sono in Java):
- Blocca le variabili fino a quando non sai che è necessario modificarle
Cioè, puoi dichiarare tutte le variabili final
fino a quando non sai che dovrai cambiarle, a quel punto puoi rimuovere il final
. Un fatto comunemente sconosciuto è che questo è valido anche per i parametri del metodo:
public void foo(final int arg) { /* Stuff Here */ }
- Quando succede qualcosa di brutto, lascia dietro di sé una scia di prove
Ci sono molte cose che puoi fare quando hai un'eccezione: ovviamente registrarlo ed eseguire un po 'di pulizia sarebbe un paio. Ma puoi anche lasciare una scia di prove (ad esempio impostare variabili su valori sentinella come "IMPOSSIBILE CARICARE IL FILE" o 99999 sarebbe utile nel debugger, nel caso in cui ti catch
imbatti in un blocco di eccezioni ).
- Quando si tratta di coerenza: il diavolo è nei dettagli
Sii coerente con le altre librerie che stai utilizzando. Ad esempio, in Java, se si sta creando un metodo che estrae un intervallo di valori, rendono compreso il limite inferiore e il limite superiore esclusivi . Ciò lo renderà coerente con metodi come quelli String.substring(start, end)
che funzionano allo stesso modo. Troverai tutti questi tipi di metodi nel Sun JDK per comportarsi in questo modo in quanto esegue varie operazioni tra cui l'iterazione di elementi coerenti con gli array, in cui gli indici vanno da Zero ( incluso ) alla lunghezza dell'array ( esclusivo ).
Quali sono le tue pratiche difensive preferite?
Aggiornamento: se non lo hai già fatto, sentiti libero di intervenire. Sto dando la possibilità che arrivino più risposte prima di scegliere la risposta ufficiale .