On Monday, 5 June 2023 at 13:57:20 UTC, Ki Rill wrote:
How do I generate `setX` methods for all private mutable variables in my class? Do I need to use `__traits`?

I need this for my [tiny-svg](https://github.com/rillki/tiny-svg) project to generate `setX` methods for all Shapes.

Example:
```D
class Rectangle {
    private immutable ...;
    private Color fillColor;
    private Color strokeColor;
    private uint strokeWidth;

    this(int x, int y) {...}

    mixin(???);

    // I need this:
    Rectangle setFillColor(Color color) {...}
    Rectangle setStrokeColor(Color color) {...}
    Rectangle setStrokeWidth(uint color) {...}
}
```

Is there a reason you can't just make these fields `public`?

D supports property accessors, so you can always go back and make them `private` later on if it turns out you need to. For example:

```d
// Before
class MyClass1
{
    public int data;
}

void example1(MyClass1 c)
{
    c.data = 123; // set
    int n = c.data; // get
}

// After
class MyClass2
{
    private int data_;
    int data() { return data; }
    void data(int value) { data = value; }
}

void example2(MyClass2 c)
{
    // Usage is exactly the same
    c.data = 123; // set
    int n = c.data; // get
}
```

Reply via email to