#    Photo by NIKHIL on Unsplash

# Code Smell 201 - Nested Ternaries

## Arrow Code, Nested Conditions, switches, else, and many more

TL;DR: Don't use nested IFs or nested ternaries

• Default Case

# Solutions

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

• IFs

# Conclusion

We must deal with accidental complexity to improve code readability.

# Disclaimer

Code Smells are my opinion.

# Credits

Photo by NIKHIL on Unsplash

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