On Monday, 23 January 2023 at 01:28:30 UTC, Ali Çehreli wrote:

I agree with Adam here. The language should provide solutions and the programmer should pick appropriate ones.

Then just add `static class`, as it will provide a solution without robbing you of another solution. You still can put symbols in a module even if `static class` is a thing. `static class` doesn't break existing solutions, it just adds things on top.


OOP is always a solution where it makes sense. I've been very happy with writing free-standing functions and dumb data types that the functions operate on... until... some invariant matters. Then I make the function a member, etc.

Perhaps because I don't buy into the "everything is a class" anymore, I am very happy with D's approach. Mostly structs and functions for me. But I use classes as well when they make sense.

Good. Now, let people have OOP and "everything is a class" if they want to.

Having said all that, I realize that your asking specifically for static classes made me think of a solution around classes. However, doesn't D has the equivalent in structs? Isn't the following what you are looking for?

struct Algo {
    static void drawLine(Canvas c, Pos from, Pos to) { ...... };
}

Now the user is forced to use it like this:

  Algo.drawLine(new Canvas(), new Pos(5, 3), new Pos(7, 9));

or this:

  Algo().drawLine(/* ... */);

but that can be @disabled.

I think it's better to have a widespread commonly known solution than hacks that you have to specifically look for. D is guilty with having too many hacks that you have to specifically learn about.


Reply via email to