Is defining get/set methods for every field overkill?

thebluepandabear therealbluepandabear at protonmail.com
Sat Nov 19 03:52:41 UTC 2022


On Saturday, 19 November 2022 at 03:39:18 UTC, []() {}() wrote:
> On Saturday, 19 November 2022 at 03:22:12 UTC, thebluepandabear 
> wrote:
>> On Saturday, 19 November 2022 at 03:19:53 UTC, []() {}() wrote:
>>> On Thursday, 17 November 2022 at 09:52:11 UTC, Dukc wrote:
>>>> ..
>>>> D has far less need for getters/setters than Java or C++. 
>>>> The reason is [Uniform Function Call 
>>>> Syntax](https://ddili.org/ders/d.en/ufcs.html). This means 
>>>> that a member of a `struct` or `class` can start out as a 
>>>> normal field and be later converted to getter/setter if 
>>>> needed, without breaking calling code.
>>>> ..
>>>
>>> can you give an example please.
>>>
>>> i.e. before (class with public member) and after ( i.e. that 
>>> public member converted to getter/setter).
>>
>> Did you read the link provided? There's examples there...
>
> it's say for member functions, not member variables.
>
> I read it, but I dont get the point was being made about how 
> use ufcs to convert a public member variable of a class type 
> into a getter and setter. Was there an example in the link that 
> I missed?

It's actually kind of hard to wrap my head around.

I will try to give you an example as to how you could convert a 
field into a getter/setter without breaking the interface between 
the user of the library, though it does require code refactoring 
on your end.

Say you have the class Rect2D:

```
class Rect2D {
     int width;
     int height;
}
```

The users of your class would use it like so:

```
Rect2D rect = new Rect2D();
rect.width = 5;
rect.height = 5;
```

Say you want to write 'SET' now whenever someone sets a 
width/height value for the rect (as an example), and 'GET' when 
someone gets the width/height value for the rect, what you could 
do is do this:

```
class Rect2D {
     int rectWidth;
     int rectHeight;

     int width() {
         writeln("GET");
         return rectWidth;
     }

     void width(int rectWidth) {
         writeln("SET");
         this.rectWidth = rectWidth;
     }

     int height() {
         writeln("GET");
         return rectHeight;
     }

     void height(int rectHeight) {
         writeln("SET");
         this.rectHeight = rectHeight;
     }
}
```

Honestly, it may not be a magic bullet, but still useful.






More information about the Digitalmars-d-learn mailing list