# Code Smell 119 - Stairs Code

## Nested boolean conditions express a business rule. Not an IF

Maxi Contieri
·Mar 8, 2022·

Subscribe to my newsletter and never miss my upcoming articles

• Problems
• Solutions
• Context
• Sample Code
• Detection
• Tags
• Conclusion
• Relations
• Credits

TL;DR: Avoid checking for boolean expressions and returning an explicit boolean.

# Problems

• Declarativeness

• Ninja Code

• Arrow Code

# Solutions

1. Return a boolean business formula value.

# Context

When dealing with boolean formulas, it is more readable to show a business boolean formula than a stair of boolean checks followed by returning an explicit true/false;

# Sample Code

## Wrong

``````def is_platypus(self):
if self.is_mammal():
if self.has_fur():
if self.has_beak():
if self.has_tail():
if self.can_swim():
return True
return False

# This is also wrong since it is polluted with IFs and not readable by a biologist
def is_platypus(self):
if not self.is_mammal():
return False
if not self.has_fur():
return False
if not self.has_beak():
return False
if not self.has_tail():
return False
if not self.can_swim():
return False
return True
``````

## Right

``````def is_platypus(self):
return self.is_mammal() &&  self.has_fur() && self.has_beak() && self.has_tail() && self.can_swim()

#We can even group conditions according to animal taxonomies
``````

# Detection

[X] Automatic

Based on syntax trees, we can safely refactor the code removing the explicit boolean value.

• Boolean

# Conclusion

Beware of returning booleans.

After the return, you will need an If statement which is also a code smell.

# Credits

Photo by Jukan Tateisi on Unsplash

Thanks again to Nico K. for this suggestion.

The real hero of programming is the one who writes negative code.

Douglas McIlroy