[Pharo-users] Defensive programming or not
Sven Van Caekenberghe
sven at stfx.eu
Mon Sep 23 04:51:36 EDT 2019
> On 23 Sep 2019, at 10:18, Kasper Osterbye <kasper.osterbye at gmail.com> wrote:
> Cheers all,
> In trying to fix one of the issues in Pharo, I came to wonder about the prefered style in in dealing with preconditions to methods in Pharo.
> In the method Random>>nextInt: anInteger
> • There is a check if anInteger is negative
> • There is no check that anInteger is anInteger
> When should I put a guard there, and throw an early warning, and when is it part of the (often implicit pre-condition)?
This is very good question.
In my opinion, in a dynamically typed language you should not explicitly enforce all types.
It is OK to rely on MessageNotUnderstood exceptions, it is the ultimate protection.
Of course, you could help your users/callers by throwing more useful exceptions, when that makes sense.
There is also a cost with checking (too often).
Furthermore, #isInteger or #isString are close testing the for a class, which is not considered good object design.
In the case of Random>>nextInt: speed seems important, but a robust interface with type checking has some value too. Hard to decide.
More information about the Pharo-users