Safe Navigation Operator “?.” for D2 ?
deadalnix
deadalnix at gmail.com
Fri Feb 28 11:33:59 PST 2014
On Friday, 28 February 2014 at 12:28:22 UTC, John Colvin wrote:
> Do you mean:
>
> Chaining operations that can return null (or some other
> known-to-be-invalid state) is a code-smell.
>
That is the worse.
> That's quite different to saying:
>
> Chaining operations using . is a code-smell.
>
> which is what deadalnix said.
>
Yes. That must not be understood as a hard rule, but something
that is true most of the time. You want to look up "Law of
Demeter". The problem when you chain is that you make a lot of
code dependent on the structure of the project, which makes it
hard to evolve or maintain the project, as any change in the
structure will impact more code than it should.
Obviously, this idea may be in tension with other principle, and
good judgement is always welcome. As a general rule, unless you
have some really good reason to, avoid chaining.
>
> Either way, a do-this-if-you-can pattern is quite reasonable
> IMO. However, I do question whether it's common enough to
> justify syntax sugar.
This pattern exist. That is called the maybe monad. To take
previous example:
writeln(person ? person.name : "");
Can become
Maybe!Person person;
writeln(person.name.get(""));
If person is a Maybe!Person, the person.name is a Maybe!string
(assuming name is a string) and the get method will provide a
default value if nothing is present in the Maybe monad.
That ensure that null is checked consistently and provide what
you want, a do-this-if-you-can pattern.
More information about the Digitalmars-d
mailing list