Code Smell 201 - Nested Ternaries
Maxi Contieri
Posted on March 14, 2023
Arrow Code, Nested Conditions, switches, else, and many more
TL;DR: Don't use nested IFs or nested ternaries
Problems
Readability
Default Case
Solutions
- Rewrite the code as an IF condition with an early return
Context
Nesting is always a problem with complexity.
We can fix it with polymorphism or early returns
Sample Code
Wrong
const getUnits = secs => (
secs <= 60 ? 'seconds' :
secs <= 3600 ? 'minutes' :
secs <= 86400 ? 'hours' :
secs <= 2592000 ? 'days' :
secs <= 31536000 ? 'months' :
'years'
)
Right
const getUnits = secs => {
if (secs <= 60) return 'seconds';
if (secs <= 3_600) return 'minutes';
if (secs <= 86_400) return 'hours';
if (secs <= 2_592_000) return 'days';
if (secs <= 31_536_000) return 'months';
return 'years'
}
// More declarative
const getUnits = secs => {
if (secs <= 60) return 'seconds';
if (secs <= 60 * 60) return 'minutes';
if (secs <= 24 * 60 * 60) return 'hours';
if (secs <= 30 * 24 * 60 * 60) return 'days';
if (secs <= 12 * 30 * 24 * 60 * 60) return 'months';
return 'years'
}
Detection
[X] Automatic
Linters can detect this complexity using parsing trees.
Tags
- IFs
Conclusion
We must deal with accidental complexity to improve code readability.
Relations
Code Smell 133 - Hardcoded IF Conditions
Maxi Contieri ・ May 20 '22
#webdev
#beginners
#tutorial
#programming
Disclaimer
Code Smells are my opinion.
Credits
One of the best things to come out of the home computer revolution could be the general and widespread understanding of how severely limited logic really is.
Frank Herbert
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
#codenewbie
#programming
#quotes
#software
This article is part of the CodeSmell Series.
💖 💪 🙅 🚩
Maxi Contieri
Posted on March 14, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.