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 ・ 2 min read

Code Smell 78 - Callback Hell
Maxi Contieri ⭐⭐⭐ ・ Jun 11 '21 ・ 2 min read

Code Smell 102 - Arrow Code
Maxi Contieri ⭐⭐⭐ ・ Nov 15 '21 ・ 2 min read
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 ・ 13 min read
This article is part of the CodeSmell Series.
Top comments (0)