Defensive programming: Difference between revisions

Content deleted Content added
No edit summary
No edit summary
Line 25:
 
----
Preconditions, Postconditions and Invariants validation are also part of Defensive Programming. This may involve checking arguements to a function or method for validity before execution of the body of the function. After the body of a function, doing a check of object state (in OO languages) or other held data and the return value before exits (break/return/throw/error code) is also wise.
for validity, doing a check of object state (in OO languages) or other held
data and the return value just before returning or throwing exceptions or error codes. It is preferrable to throw exceptions as messages instead of returning
values that a client programmer is likely to be unprepared for. Within functions, you may want to double check that you aren't referencing something
that is not valid (ie: null) and that array lengths are valid before referencing
elements with indexes.
 
Within functions, you may want to double check that you aren't referencing something that is not valid (ie: null) and that array lengths are valid before referencing elements with indexes on all temporary/local instantiations. A good heuristic is to not trust the libraries you didn't write either. So any time you call them, check what you get back from them. It often helps to create a small library of "asserting" and "checking" functions to do this along with a logger so you can trace your path and reduce the need for extensive debugging cycles in the first place. With the advent of logging libraries and aspect oriented programming, many of the tedious aspects (yes, a pun) of defensive programming are mitigated.
 
Generally speaking then, it is preferrable to throw intelligible exception messages that enforce part of your API contract and guide the client programmer instead of returning values that a client programmer is likely to be unprepared for and hence minimize their complaints and increase robustness and security of your software.
-------------------------------------