Fixing const arrays

Mehrdad wfunction at hotmail.com
Sun Dec 11 03:16:33 PST 2011


On 12/11/2011 2:56 AM, David Nadlinger wrote:
> On 12/11/11 10:04 AM, Mehrdad wrote:
>> On 12/11/2011 12:57 AM, Andrei Alexandrescu wrote:
>>> I think you should write:
>>>
>>> auto copy = this.save;
>>
>> Ah good point, I forgot about that. Idk then.
>> (You forgot the parentheses though. :P)
>
> No, it's correct like that, save() is a @property.
>
> Even though I recently updated Phobos to compile with -property 
> enabled, I agree with Andrei here that in many cases there will be no 
> perfect consensus whether a given member should be a @property or not, 
> thus potentially adding an extra source of complexity, or rather 
> annoyance.
>
> David

Whoa what?! I didn't know save() is a @property. In that case I stand 
corrected. :-)

Nevertheless, I think that makes no sense. :P If something isn't a 
"property" of something else, it shouldn't be marked as such.

But there are more reasons than that...

I have found Microsoft's guidelines for C# to be great for general usage 
of the word @property:
http://msdn.microsoft.com/en-us/library/ms182181.aspx

Specifically:

"Properties should behave as if they are fields; if the method cannot, 
it should not be changed to a property.
Methods are better than properties in the following situations:

- Calling the method two times in succession creates different results.
- The method performs a time-consuming operation. The method is 
perceivably slower than the time that is required to set or get the 
value of a field."

Since both of these can be true for all but the most trivial kinds of 
ranges (e.g. file-system-related enumerators/ranges would very likely 
need to re-open a handle to a directory in order to traverse it, which 
is both relatively time-consuming AND returns a different result every 
time, and could even unexpectedly fail due to permission/connectivity 
issues), I don't think it makes sense for save() to be a @property.


More information about the Digitalmars-d mailing list