C# is still one of my favorite languages (even though I use F# most of the time now), but I do admire Java for making it significantly more painful to write mutable rather than immutable classes; it's too bad that fact was lost on so many programmers.
Kudos for sharing the Rich Hickey video; it's one of my favorites of all time.
Out of curiosity, how does it do that? As far as I know, everything in Java is mutable by default.
class Foo {
private int x = 0;
public void bar() {
this.x += 1; // Whoops!
}
}
Foo x = new Foo();
x.bar(); // Mutating call.
Which Java does not prevent.To be clear, I'm the guy that insists on defining classes as either abstract or sealed, and almost always marks fields as readonly. But, I'm okay with the kind bounded mutability that you mentioned; clients of a `Foo` instance have to treat it as immutable.
Here is how I do OOP:
* I make classes to hide state, and hidden state is the same as being stateless.
* As I learn more about the problem, I start subdividing classes into smaller classes (not necessarily via inheritance).
* So, as my understanding of the problem increases, the number of class division increases, and by the pigeonhole principle, the amount of state approaches zero.
You're making an either/or distinction here without any reason. You could just as well say, "The number of cars that recently added anti-lock brakes gives significant evidence that ABS is winning out over seat belts."
I don't see these languages removing any OOP features, so I think what it shows is that functional features are either useful independent of OOP features, or complement them. (My personal belief is the latter: the languages I enjoy the most have both.)
Too short a road from the obvious to the assumed...
In the future, I hope that FP will be the default design choice, with objects being used where needed such as for components, plug-ins, and ad-hoc dictionary-passing-style tools.
After all, simplicity is the most important property of any software system - http://www.infoq.com/presentations/Simple-Made-Easy