Why I'm Excited about D

Idan Arye via Digitalmars-d digitalmars-d at puremagic.com
Wed Apr 8 16:15:19 PDT 2015


On Wednesday, 8 April 2015 at 16:47:10 UTC, Andrei Alexandrescu 
wrote:
> On 4/8/15 2:24 AM, Idan Arye wrote:
>> At the very least, put () after the writelne:
>
> No. -- Andrei

Why not? The property syntax's purpose is to create... well... 
properties. Give you the illusion that you are reading and 
writing member fields when you are actually calling functions.

`names.reverse` is OK, because you can imagine that `names` has a 
member field called `reverse` that holds it reversed(this is not 
really true because `names.reverse` is mutating the original 
array, but the point is that we are not calling `reverse` for 
it's side - we are only interested in it's return value).

`names.reverse.writeln;` - not so much. We are not treating 
`writeln` as a property - we don't really care what it returns - 
we treat it as a method, and therefore it should use the method 
call syntax.

In matter of fact - if `writeln` was a member field - the very 
same thing the combination of UFCS and property syntax is trying 
to emulate - this code wouldn't compile:


struct Foo {
     string writeln;
}
struct Bar {
     Foo reverse;
}

void main() {
     Bar names;
     names.reverse.writeln;
}

source/app.d(10): Error: dotvar has no effect in expression 
(names.reverse.writeln)


More information about the Digitalmars-d mailing list