Accessors, byLine, input ranges

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Fri Jan 29 08:45:51 PST 2010


Michel Fortin wrote:
> On 2010-01-29 10:40:23 -0500, Andrei Alexandrescu 
> <SeeWebsiteForEmail at erdani.org> said:
> 
>> I'll tell you what I'd have liked: a landslide of responses to my 
>> question revealing my mistaken ways and clarifying without a shade of 
>> a doubt that byLine should be a @property. Or not. (I don't even care 
>> which.)
>>
>> The fact we're having a debate about this (and Steve even says it's a 
>> clear cut case and there are other more ambiguous!) is worrisome. Take 
>> this: I got different answers from _supporters_ of @property!
> 
> The problem entirely reside on the ambiguous semantics of 'byLine'. The 
> name makes us think it does something while it does something else 
> (consuming a line). If it did what we'd expect it should be a property, 
> but since it does not it shouldn't be. Fix 'byLine', either by changing 
> the name or changing what it does, and whether it's a property or not 
> will become clear.

This is a very good point!  Using byLine as an argument against 
@property is just silly, as it is badly-named to begin with.  The name 
itself doesn't really tell you what it does, you have to read the docs 
or see it in the context of a foreach to understand it.  The omittable 
parentheses are not the problem here.  A more descriptive name would be 
either of these, depending on how the function actually works:

   readByLine()   // not a property
   lines          // definitely a property
   byLinesRange   // also definitely a property


>> A good convention is one that you apply without wasting time to think 
>> of it every single time you use it: naming conventions, braces 
>> conventions, even most class vs. struct conventions. The well-defined 
>> ones work great because _they save you time_.
> 
> Well, you should probably care a little more about your naming 
> convention. It's confusing, and it'll probably end up waisting the time 
> of some people who'll wonder why it consumes lines before you read them. 
> I was absolutely sure it didn't before someone pointed it out to me.

Speaking of Andrei's naming convention; in the case of empty() there 
were a lot of protests to the name, because people couldn't tell whether 
it was a property or an action.  The @property annotation mends that.

-Lars



More information about the Digitalmars-d mailing list