Best of…: Best of 2016: Tern Around…
Ah, the ternary operator. At their worst they're a way to obfuscate your code. At their best, they're a lovely short-hand.
For example, you might use the ternary operator to validate the inputs of a function or handle a flag.
Adam Spofford found this creative use of the ternary operator in a game he's developing for:
this.worldUuid = builder.worldId == null ? null : builder.worldId; this.position = builder.position == null ? null : builder.position; this.rotation = builder.rotation == null ? null : builder.rotation; this.scale = builder.scale == null ? null : builder.scale; this.worldUuid = builder.worldId; this.position = builder.position; this.rotation = builder.rotation; this.scale = builder.scale;
Curious about how this specific block came to be, Adam poked through the Git history. For starters, the previous version of the code was the last four lines- the sane lines. According to git blame, the project lead added the four ternary lines, with a git comment that simply read: "Constructing world details". That explains everything.
ReturnaryThere's a certain class of bad code we've all seen before:
boolean someFunction() { if (someBooleanExpression) { return true; } else { return false; }}
It's dumb, but largely harmless. We've posted variations on this idea in the past. Scott P, however, found a new variation that may be the pinnacle of this kind of simple-minded programming. I'll let him introduce it.
I inherited a project that was developed in isolation by a lone developer that didn't do code reviews. I find something new to be horrified about every day. The developer responsible has a knack for adding unnecessary complexity to what should have been a much simpler application. This method perfectly sums up what the architecture of this application is like on every level. It's layer upon layer of obfuscation or redundant code.
boolean hasFeatures() { if (license.getFeatures().size() > 0 ? true : false) { return true; } return false;}
Honestly, I think the ternary operator doesn't get enough use. We should just start putting ternary expressions all over our code, even if it means writing things like: myvar = true ? valueReturningFunction() : valueReturningFunction();. Isn't that pretty great? I love it.
[Advertisement] Release!is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!