DEV Community

Cover image for Code Smell 119 - Stairs Code
Maxi Contieri
Maxi Contieri

Posted on • Originally published at maximilianocontieri.com

Code Smell 119 - Stairs Code

Nested boolean conditions express a business rule. Not an IF

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

Problems

  • Declarativeness

  • Ninja Code

  • Readability

  • 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Detection

[X] Automatic

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

Tags

  • Boolean

Conclusion

Beware of returning booleans.

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