Code style for property

Nicholas Wilson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Mar 12 04:15:04 PDT 2017


On Sunday, 12 March 2017 at 10:47:35 UTC, Andrey wrote:
> Hello, how better to declare properties, for example I have 
> class:
>> class Foo {
>>     this(in int x, in int y, Bar bar) {
>>         this.x = x;
>>         this.y = y;
>>         this.bar = bar;
>>     }
>> private:
>>     int x;
>>     int y;
>>     Bar bar;
>> }
> And I want make access to read x, y and bar. Probably I should 
> add prefix for private members, that is a question: what prefix 
> should I use? Now I use prefix p_ (from the word property), but 
> maybe prefix m_ is better and you need to use it for all 
> private members?
> Another question: what style is better for declare getters?
> this:
>> class Foo {
>>     @property int x() { return p_x; // or m_x; }
>>     @property int y() { return p_y; // or m_y; }
>>     @property int bar() { return p_bar; // or m_bar; }
>> }
>
> or this:
>> class Foo {
>>     @property {
>>         int x() { return p_x; }
>>         int y() { return p_y; }
>>         int bar() { return p_bar; }
>>     }
>> }
>
> And one more question: should I add ref for property, to be 
> able do this (if setter is declared):
>> foo.x += 5

You should only declare getters/setters if you need to (or think 
you may need to later)
       intercept the assignment or acquisition of a variable 
(logging, computing on demand)
       have a field as externally read only (setter only)
otherwise you should have the variables as normally assignable.

A single leading underscore is usually used to denote a private 
variable ( names prefixed with two leading underscores are 
reserved for use by the compiler).

If you must use @property and you have a whole lot of them in a 
row the second form is preferred (consider also using 
`@property:` if you have no more non- at property function to 
declare). Note that you still need to declare the variables you 
are going to return in the property

if the variable you are going to return is ref then unless you 
are choosing which variable to return at runtime (see first 
paragraph) then just have the variable be public.


More information about the Digitalmars-d-learn mailing list