[fpc-pascal] Optional param modifier
Martin Frb
lazarus at mfriebe.de
Sat Apr 13 18:51:50 CEST 2019
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20190413/cdcc3313/attachment.html>
More information about the fpc-pascal
mailing list