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