Seems a bit shitty they mention the article by Eric Elliott (one of the first search results if you search “nested ternaries”) but they don’t take his advice.
This doesn’t seem ugly to me at all (left out
animal
so I didn’t have to type as much):const animalType = canBark() && isScary() ? 'wolf' : canBark() ? 'dog' : canMeow() ? 'cat' : 'rabbit';
Until JS supports switch expressions, nested ternaries will continue to be the most effective way to write multi-state conditionals.
Also, stop using linting tools that prioritize consistency over human readability, and then complaining that the code they generate is not easily-readable by humans.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch - hasnt it had this forever? Or are you refering to something else?
Pretty sure they meant
match
as in pattern matching, notswitch
as in switch/case/break.You can see the proposal here: https://github.com/tc39/proposal-pattern-matching
Nah, I meant switch, as that’s what it’s called in C#-land. See above.
That proposal for matching looks interesting, but not quite the same, no.
Are you sure?
Your C# example:
var output = input switch { null => "Null", 0 => "Zero", > 0 => "Positive", _ => "Negative" };
JS proposal for match:
const output = match input { when null: "Null"; when 0: "Zero"; if input > 0: "Positive"; default: "Negative"; }
I often have the pleasure of refactoring this mess. And sometimes it’s not just 2 ternaries but like 4 or 5 thrown together. It took like half an hour to even understand what was going on. If you do this, you are just an evil person…
So I totally support this. Stop this shit…
This shit always leaves me wondering who even writes this crap. The answer is more often than not a junior that just discovered code golf thinking he’s oh so clever. You learn to appreciate boring code, with experience…
Totally agree with you. I’m always an advocate for boring and easy to understand code.
I really don’t need an extra layer of complexity just so someone can save a line or two.
Does this article need to exist? I assumed anyone writing a nested ternary was intentionally writing shit code
I’ll be sending this article to my dev teams. It’s right up there with “stop writing Helper classes”.
What’s wrong with helper/util classes?