@property
Steven Schveighoffer
schveiguy at yahoo.com
Fri Jun 25 06:08:29 PDT 2010
On Thu, 24 Jun 2010 18:24:55 -0400, Pelle <pelle.mansson at gmail.com> wrote:
> On 06/24/2010 11:38 PM, Steven Schveighoffer wrote:
>> This is why you are confused -- @property *is* a naming issue. The
>> difference between the hackish D current syntax and the sane @property
>> syntax is that in hackish D, the caller gets to decide how to name the
>> function, which doesn't make any sense.
>>
>> And the problem is precisely that it's anyone's guess. It should be up
>> to the author of the structure. It should *not* be up to the user of the
>> struct to 'guess'.
>>
>> How about we get rid of case-sensitivity, so people who like to use all
>> caps can have their say in how they call your functions. Does it make
>> any sense? How about we allow spanish translations of english terms to
>> be used? How about just unambiguous prefixes? Any naming issue should be
>> decided by the author of the function so that 1) it's consistent
>> everywhere it's used and 2) the author is free to imply a meaning
>> without resorting to overly verbose text. To allow otherwise causes way
>> more confusion than some author who can't decide on whether something is
>> a property or not. I very seldom run into cases where the name of the
>> function is obvious, but whether to make it a property or not isn't. I
>> always consider the property/no-property question when deciding the
>> name. Empty is a perfect example -- property through and through.
>>
>> Save is not as obvious, but that's because the author decided the name
>> without considering whether it should be a property. If it should be
>> considered a property, it should be a noun (not a hard rule, but it
>> makes more sense that way). I'd say something like 'copy' would look
>> better as a property. But IMO, save provides almost no utility so that
>> leads to it being hard to name. Blaming property syntax is not the way
>> out.
>>
>
> Your argument seems to stem from the idea that @property is part of the
> name of a function, and that the () indicates some mutative action upon
> an object.
Not exactly. I think () implies a function where no () implies a
property. Mutation is *not* implied in ().
What a function or a property consists of is all open to interpretation.
Generally it's assumed that a getter property gets a value from the
object, and a setter sets a value, and a function can do whatever it wants
(mutation or otherwise). But what should not be open to interpretation is
whether something is a property or a function. The key here is the
*author* gets to decide the interpretation, so any usage of his code is
consistent.
> Well, liking it or not I do not agree about the naming part, I see it
> more in the league of coding style and indentation. I totally allow
> users of my code to decide their variable names and indentation style.
This is not about allowing users to decide their variable names, it's
about not letting users decide *your* variable names. If I build a struct
or class, I want it's usage to be well-defined and consistent.
> We always have constness and/or purity to imply lack of mutation.
>
> Is split a property? It doesn't mutate a string, and totally could be an
> instance variable for every given string, but isn't. It doesn't really
> feel property-like, but writing "a b c".split without parentheses works
> better than with them.
I disagree, I think "a b c".split() looks better. But it should be up to
the author of split, if he thinks it's a property, then so be it, we will
all use it as a property.
-Steve
More information about the Digitalmars-d
mailing list