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.

Reply via email to