Well, I write this article because lately I was dealing with source code in js that had an excessive amount of if statement,
at levels that I had...
For further actions, you may consider blocking this person and/or reporting abuse
Nice article , but i always prefer readability over number of lines :)
True, and some example on this article are horrible, in my opinion.
That second ternary almost explode my brain.
well bad luck, thanks for your opinion. I consider more horrible a code like this:
export const removeProps = (source: Object, props: Array, keepReceivedProps: boolean = true) => {
return Object.keys(source).forEach(key => {
if (keepReceivedProps) {
if (!props.find(item => item == key)) delete source[key];
} else {
if (props.find(item => item == key)) delete source[key];
}
});
};
This code is from a project make maybe from JAVA developers that come to JS or for JS Jr developer. the if nesting I think is very bad. So for this reason I'm looking for alternatives to avoid write this type of code and publish material to try the developers in find new alternatives
Slight correction, it's no longer a ternary if it contains more than 3 values on the right hand side (it becomes an n-ary operator ;) )
NICE thanks for the data
And the lack of spacing, my eslint config would choke on the examples.
They were not developed using eslint, you can execute them directly from node in a new project
Some useful suggestions here; but some should come with health warnings:
false
when another type is expected (this is a good use for ternary). Linting rules often disallowconditionIsTrue && functionCall()
outside an assignment expression.if
but can get rid of the redundant use ofelse
. Simpler and more readable than your suggestion.I am glad to see that it generates reactions in other devs, it is the idea of the article. As I said above, the idea is not to stop using if it's just something to shake them and they can think about decisions in another way.
Generating reactions is all well and good, but I think it would be more productive to put forward examples of alternatives to
if
in contexts where they are appropriate/useful. Given the introduction describing code with too many ifs; some junior devs may mistakenly believe all your solutions represent good practice...In the header it says that they are clearly techniques and you should not go into paranoia. Maybe in future articles I will raise 'real' situations I am collecting many situations with many sentences of my work, but at the moment I do not have enough time to do something at that level.
The nested ternary hurts my brain, despite that, the article has a lot of gems, thanks guys!
hahaha yes is hard to process I know, but are just examples, the idea is to open the brain to new alternatives some very nice other heavy to understand.
I totally agree that nested ternaries are a pain to read.
Also, the itemDropped sample looks very "magical" to a person not familiar with such paradigm.
Well the idea is to provide reason to star going deeper in JS.
While you've shown some nice alternatives for IF, most of these examples feel less readable after being refactored. Especially chaining the ternary operator should be avoided IMHO.
Yes in the refactor, some of semantic is lost. The chaining ternaries is the most extreme. Consider this things as example you can chose use it or not.
Well well, i think we should program in human language, you are not doing it with this examples xD
Is the problem with the functional paradigm, is less semantic in comparation with oop.
You can do functional fine with a more verbose language (e.g. rust allows for assignment with the result of an if statement), this is just a design choice of the language.
Having a more verbose language is not inherently bad nor are if statements not part of a proper functional language.
Yep, most fp langs consider if statements simple expressions, so you can pass the results around
I've had to deal with "overdone" uses of the ternary operator. I was not pleased.
The point of replacing the elseif with ternary nesting is hard to read. Another way could be to use a single level of if. but the idea of the article was to program without using a single if. I am open to see other devs as they would raise this.
Very nice article. But I think I found one catch:
The rewrite in the second example for ternary operators makes the code very unreadable. The cumbersome part of this example are the
else
statements. If you use guard clausesif
statements, the code becomes much more readable and concise:In this case, you can even remove the curly braces:
Now both versions are much more readable and the reader can understand the intent of the written code much better: catch errors and return them.
thanks for comment!
The article is nice, it gives some cool alternatives that not everyone might know about, a handful of which we use at work.
As others said, tho, some are harder to read.
A little side note about #4 and #5: it would be better to re-use the object and not to create it every time a function is called (eg: creating it inside
array.map()
, etc), it slows down your code a lot!I'm saying this because it might not be obvious and also because I've had to refactor some code that was doing the exact same thing after I got hired 😊
A better approach would be to do something like this instead:
If you want even better performance out of this, you can use a Map() instead of an object 🖖🏼
Edit: I think you have two #5s 🤔
thanks for comments! the idea was make an arrow function that return an object. I had thought about this option too, it is more semantic but much more code. It is in each developer as you feel more comfortable.
TBH I think all of your examples are more readable with ifs, especially the nested ternaries. I would hate to see that in code I have to work with.
Ifs are very easy to read and understand, there is no performance problems with them. What do you gain from avoiding ifs?
No way is nested ternaries easier to read than if/else if statements. Teraries should be used for if/else statements only. Nesting them is insane. It reminds me of if/else if operations in Excel.
Yes is similar, the Excel formulas are something like fp
what do you mean by this?
If you've ever had to write a conditional in Microsoft Excel, you'll be familiar with this. Check out this article to see what I mean: exceljet.net/excel-functions/excel....
Excel doesn't have if/else if statements, it only has if/else which is the same as a ternary. Do you really think reading this is easier?
=IF(C6<70,"F",IF(C6<75,"D",IF(C6<85,"C",IF(C6<95,"B","A"))))
It is just a proposal, for me an excel formula is just as ugly as an if..else..elseif with nesting.
Hey Damian the last example is not working.
the output is:
:o :O yes that true, I will fix it. thanks for tell me.
Hi @damxipo !
I'm a ternary fan, but as many said, those nested ternaries are harder to read than the ifs.
I really liked the switch alternative, I'm going to implement it right now.
Please, pleeease, change those vars to let/const :)
Thanks Damian, really good article! Keep it coming
Oh my god is true, my bad. I always use let and I don't know what happened
Most of the suggestions will just make your code a nightmare to maintain. This is the opposite of clean code. If someone want better code he should not use tricks like that. Good luck reading your code that was written few years ago, I only hope that it will not be someone that new into programming.
Hi, thank you for writting. As a lot of people say, sometimes is not readable, always think readability and the most important, think for the others, junior devs and so one :)
Have a nice day!
ESLint discourages the use of nested ternary conditions.
It's the problem you are letting the lint tell you how you have to program. eslint can be configured by activating and deactivating rules to suit each one.
Q. Who wrote the linter rules?
A. People with enough experience to know that nested ternaries are really difficult for a human to parse quickly and therefore make code difficult to work with.
I didn't know that was possible to create a arrow function that returns a object's property that was just created in time. Nice
thanks, you're open my world :DDD
Maybe add a señority level indicator before star reading the article.
Nested ternaries? Yuck.