4 ms·
Perhaps you could return an Either from the constructor, and then either have a special construct to handle Left: myObj = new Object() :{ cleanup() } or r
by T-R 15y ago
Perhaps you could return an Either from the constructor, and then either have a special construct to handle Left:
myObj = new Object() :{ cleanup() }
or require dummy objects in case of failure:
myObj = new Object() ?? new DummyObject()
Admittedly less than optimal. The more I think about it, the more I think it's a bad idea... The first still means that you need a separate catch block for each statement. The second is essentially swallowing the exception.
Aside from that, using Either in the return kills your ability to do method chaining, unless you build method chaining into an operator and have it propagate the Either (similar to bind).
- riffraff 15y agoI think I am missing something: is there any commonly used statically typed OO language that allows you to return a different type from the constructor? AFAIR even in scala you either use a factory method in a companion object or use "real" constructors.
- 0x0 15y agoIf Objective-C fits your definition of statically typed OO language, then I believe you can return whatever you want in the -(id)init constructor. The common idiom for implementing constructors in subclasses is to do "self = [super init]; if (self) { ... subclass constructor impl ... }; return self". Setting self to nil is a common use-case.
- ryanpetrich 15y agoObjective-C isn't a statically typed language, it is a dynamically typed one with static type annotations to make the compiler check common errors for you.