Nathan M. Swan wrote:
The constructor definition syntax doesn't seem to be an improvement: this new instead of the old this.

well the reason they're named is because then you can multiple constructors under different names:

    class Model
    {
        string name;
        float x = 0, y = 0;

        this new(string n) {
            name = n;
        }

        this new(string n, float x, float y) {
            name = n;
            this.x = x;
            this.y = y;
        }

        this load(string fn) {
            auto file = File.load(fn);
            ...
        }
    }

Here we have two overloads of the constructor new() without conflict, but also two constructors that would have conflicted if they weren't separated by name: new(string) and load(string).

In this situation today, we would normally need to make a static factory function called 'load()' which created a 'new Model()' and returned it. We do this factory function thing all the time today, and it's required for things like Memory Pools and to resolve naming conflicts like above. Ideally, there should be a single, consistent way of creating objects which allow for arbitrary named separation, and I think this is best solution.

Both Vala and Dart have a named-constructor syntax to address this issue, but neither feels as consistent (to me) as what I'm presenting above.

Reply via email to