this post was submitted on 11 Dec 2023
32 points (79.6% liked)

JavaScript

1982 readers
1 users here now

founded 1 year ago
MODERATORS
all 35 comments
sorted by: hot top controversial new old
[–] kassuro@feddit.de 22 points 11 months ago (4 children)

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...

[–] coloredgrayscale@programming.dev 10 points 11 months ago (1 children)

pleasure of refactoring this mess took half an hour to understand

If you can use any of the jetBrains IDE it can rewrite it to if/else with a few clicks (or [alt] +[return])

[–] kassuro@feddit.de 2 points 11 months ago

Ah that would be helpful. Gotta try that the next time I encounter such a monstrosity.

[–] folkrav@lemmy.ca 8 points 11 months ago (1 children)

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…

[–] kassuro@feddit.de 5 points 11 months ago

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.

[–] SatouKazuma@lemmy.world 7 points 11 months ago

So I'm pretty sure nested ternaries violate one of the Geneva Conventions' optional protocols.

[–] Lmaydev@programming.dev 1 points 11 months ago

Perfect job for ChatGPT.

[–] JakenVeina@lemm.ee 8 points 11 months ago (2 children)

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.

[–] CameronDev@programming.dev 5 points 11 months ago (2 children)
[–] spartanatreyu@programming.dev 10 points 11 months ago (3 children)

Pretty sure they meant match as in pattern matching, not switch as in switch/case/break.

You can see the proposal here: https://github.com/tc39/proposal-pattern-matching

[–] CameronDev@programming.dev 3 points 11 months ago

Your probably right, that looks quite desirable.

[–] snowe@programming.dev 1 points 11 months ago (1 children)

they also said switch expressions, which indicates they want the switch statement to be settable directly to a variable with whatever the return type of the switch is.

[–] spartanatreyu@programming.dev 2 points 11 months ago

Match already returns the value which can be thrown into a variable.

[–] JakenVeina@lemm.ee 1 points 11 months ago* (last edited 11 months ago) (1 children)

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.

[–] spartanatreyu@programming.dev 5 points 11 months ago* (last edited 11 months ago) (1 children)

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";
}
[–] JakenVeina@lemm.ee 1 points 11 months ago

Aha, yeah, I see it now. Looking forward to it.

[–] JakenVeina@lemm.ee 2 points 11 months ago* (last edited 11 months ago)

Yeah, a switch expression is different than a switch statement. I'm not actually sure how many languages actually have them, but in C# its...

var output = input switch
{
    null    => "Null",
    0       => "Zero",
    > 0     => "Positive",
    _       => "Negative"
};
[–] Maoo@hexbear.net 8 points 11 months ago

I'll never stop

[–] rarely@sh.itjust.works 7 points 11 months ago
const statement = specificStatement ?? nonSpecificStatement ?? someStatement ?? unrelatedStatement ?? ‘idk’;
[–] stockRot@lemmy.world 4 points 11 months ago

I don't use JavaScript and only learned what a ternary is from this article, but that example was pretty damn readable in my opinion

[–] FourThirteen@lemmy.world 4 points 11 months ago

I've been a software developer for 7 years and I've grown to hate terneries entirely. They only hinder readability. Readability is the biggest factor in maintainability. Code that is hard to maintain makes bugs.

I always mark PRs with nested terneries as "needs work".

[–] CameronDev@programming.dev 3 points 11 months ago (1 children)

Does this article need to exist? I assumed anyone writing a nested ternary was intentionally writing shit code

[–] Templa@beehaw.org 4 points 11 months ago

Some people think they are being "cleaver" writing a lot of stuff in one line. So yes, it does.

[–] Anticorp@lemmy.ml 2 points 11 months ago
[–] hoot@lemmy.ca 2 points 11 months ago (2 children)

I'll be sending this article to my dev teams. It's right up there with "stop writing Helper classes".

[–] coloredgrayscale@programming.dev 7 points 11 months ago

What's wrong with helper/util classes?

[–] CrayonRosary@lemmy.world 6 points 11 months ago (1 children)
[–] hoot@lemmy.ca 3 points 11 months ago
[–] jeremyparker@programming.dev 1 points 11 months ago* (last edited 11 months ago)

I'm pretty sure wolves don't really bark. They're all growls and howls. You said you wanted more bike shedding, right?

[–] BrianTheeBiscuiteer@lemmy.world 1 points 8 months ago* (last edited 8 months ago)

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';
[–] RyeMan@lemmy.world 1 points 11 months ago

Cries in JSX

[–] jadero@programming.dev 1 points 11 months ago (1 children)

Or anywhere for that matter. Have you got nested IF()s in Excel? For crying out loud, pop into VBA and write it up as a custom function like a human being.

[–] spartanatreyu@programming.dev 4 points 11 months ago (1 children)

Good news Everyone

Excel has a JS API now, so we can get rid of VBA entirely and fill Excel with terrible ternary operators!

[–] jadero@programming.dev 1 points 11 months ago

Oh, I didn't know that Excel could do JS. I haven't touched it since I got out of the field a decade or so ago.

One of the things I did was quite a bit of Excel consulting and training. I remember the joy of trying to decode massive formula cells, especially when there were nested IF()s. My rule of thumb was that anything with more than three functions in one formula got converted to a custom function, even if it didn't have general utility.

I found that anyone who could construct and understand those massive formulas were generally capable of dealing with the equivalent VBA with a bit of training. Also, it was generally true that if they couldn't handle the relevant VBA, they were in no position to deal with massive formulas anyway.