PROPOSAL: Elvis operator (original) (raw)

Olivier Chorier lapsus63 at gmail.com
Sat Mar 21 09:47:10 PDT 2009


Oh, ok, I get it : Ex. : int value = object.getSubObject().getValue() ?: -1 ;

So, I'm not sure the use of .? to be necessary.

What do you think about an explicit ((MyObject) null)... ?: defValue;

Marek told:

<<What if we have default SubObject which we can use when main one is null, and it's ugly generic:

SubObject<FirstType,**SecondType,TirdType,.......> subObject = object.?getSubObject() ?: default;>> --> "default" would have to be cast as SubObject<FirstType, SecondType, ThirdType>, wouldn't it ?

Finally, another idea could be not to use '?:' neither '.?' but a reversed way to use: int value = object?.getSubObject()?.getValue()? : -1

But it implies the multiple use of '?', which is in my opinion not very sexy (but more detailed and "configurable")

2009/3/21 Marek Kozieł <develop4lasu at gmail.com>

W dniu 21 marca 2009 16:00 użytkownik Olivier Chorier <lapsus63 at gmail.com> napisał: > > Ok, what about : > > int value ?= object.getSubObject().getValue() : -1; > > Pros : > - I think the compiler could easily retranscript it using > - Much more readable > > Cons : > - The potential problem is that the "interpretation" differs from an &= or += operator >

It's ok for me, in this case. But did you ever wander why NPE is so common? Isn't that because people do not want write so much if-s and declare so many one time used variables. but ?: can give something nice: void f(Some some){ ( some.getOut ?: defOut ).write(...); ... } while ?= would require to: void f(Some some){ OutputStream out ?= some.getOut : defOut; out.write(...); // Now we need worry for 'out' till end of function. ... } -- Pozdrowionka. / Regards. Lasu aka Marek Kozieł http://lasu2string.blogspot.com/



More information about the coin-dev mailing list