Hi Kasper,

> On 23 Sep 2019, at 10:18, Kasper Osterbye <kasper.oster...@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)?
> 
> Best,
> 
> Kasper

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.

Sven



Reply via email to