@property - take it behind the woodshed and shoot it?
Adam Wilson
flyboynw at gmail.com
Thu Jan 24 17:16:43 PST 2013
On Thu, 24 Jan 2013 17:15:09 -0800, kenji hara <k.hara.pg at gmail.com> wrote:
> 2013/1/25 Adam Wilson <flyboynw at gmail.com>
>
>> On Thu, 24 Jan 2013 15:04:20 -0800, Timon Gehr <timon.gehr at gmx.ch>
>> wrote:
>>
>> On 01/24/2013 10:24 PM, Adam Wilson wrote:
>>>
>>>> ...
>>>>
>>>> All I can say is that in this case even with UFCS C# enforces parens
>>>> because it's syntactically clear. Yes, it might be slightly annoying
>>>> to
>>>> have to type the (), but that's how you define a function in every
>>>> other
>>>> language. A shortcut with side-effects isn't a short-cut, it's a bug
>>>> factory.
>>>>
>>>
>>> It is not a shortcut, it is a formatting option, and using it does not
>>> have side effects.
>>>
>>> And to be honest, once the language spec settles down tools
>>>> like ReSharper/VisualAssist/etc. can take care of the extra parens.
>>>>
>>>
>>> Tools will be configurable to highlight certain constructs anyway.
>>>
>>> I hand type a small fraction of the parens that actually appear in my
>>> C#
>>>> code.
>>>>
>>>>
>>> It is about reading, not typing.
>>>
>>>
>>>
>> *sigh* ideally yes, it's just a formating option. The problem is that
>> right now, it's NOT.
>>
>> Consider:
>>
>> module main;
>>
>> import std.stdio;
>>
>>
>> struct Thing {
>> int foo() { return 0; } // method
>> int bar; // data field
>> @property int baz() { return 0; } // data field
>> }
>>
>> int main(string[] argv)
>> {
>> writeln("Hello D-World!");
>> return 0;
>>
>> Thing t;
>> t.bar = 10; // this is a data field because it is
>> // declared as "int bar" above,
>> // not because I didn't use parens down here
>>
>> t.foo; // this is a function call because t.foo is a function
>>
>> t.baz; // this is a data field because i declared
>> // "@property int" above, not because I left off parens here
>>
>> t.bar(); // error, type int has no call method
>>
>> t.baz(); // is this a function or a property? oops have to go
>> look
>> at the code.
>> }
>>
>> But what happens if t.baz returns a delegate?
>>
>> Because properties, which conceptually have nothing to do with
>> functions,
>> are implemented as functions they have the same optional parens rules as
>> functions. The problem is that they aren't intended to be used as
>> functions
>> so in the case of delegate, you get massive explosions in the compiler.
>> For
>> something that should be straight-forward. If t.baz is a delegate than
>> t.baz() should call the DELEGATE, but it doesn't...
>>
>> Optional Parens Encourage Ambiguity. Ambiguity Fosters Bugs.
>
>
> 1. Optional parentheses for normal functions should work shallowly IMO.
> 2. Optional parentheses for property functions should not work. Applying
> ()
> for property function name always applied to its returned value.
>
> #1 is a ratification of current behavior. It allows the combination of
> UFCS
> and removing redundant ()s.
> #2 is a breaking change. If we need it, community consent is required.
>
> Kenji Hara
I can completely agree with this change. It is perfectly workable to fix
properties without changing optional parens. I just won't use them :-P
--
Adam Wilson
IRC: LightBender
Project Coordinator
The Horizon Project
http://www.thehorizonproject.org/
More information about the Digitalmars-d
mailing list