On 13/04/2019 18:40, Benito van der Zander wrote:
Hi,
the parameter is already optional without any modifier, since you can
always pass nil for it.
Perhaps there could be the opposite modifier, so the function cannot
be called with nil. Like
procedure DoThis(nonnil var obj: TObject);
and then you need to check if it is nil, before calling DoThis .
Or you put it in the type. type TSomeObject = nonnil class(TObject)...
and then it would never be allowed to be nil.
Or for pointers type PDude = nonnil ^TDude;
If you would want to use such a nonnil class as field in another
class, you would need to initialize it in the constructor.
Well nil is only with objects. For strings you could expect that there
are not empty.
For integers you can have sub-ranges. But for float, you may have a
condition that says > 0.
I think this goes towards https://en.wikipedia.org/wiki/Design_by_contract
pre/post conditions.
Those can then be applied for anything. And the compiler can add
compile/runtime checks, the same way it does range checking.
As stated on wikipaedia this also plays towards docs. If a function has
a postcondition that either forbids nil, or explicitly allows it, then
you do not need to look at its code. You know what to expect.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal