Code Smell 145 - Short Circuit Hack

Maxi Contieri - Jun 30 '22 - - Dev Community

Don't use boolean evaluation as a readability shortcut

TL;DR: Don't use Boolean comparison for side effect functions.

Problems

  • Readability

  • Side Effects

Solutions

  1. Convert short circuit into IFs

Context

Smart programmers like to write hacky and obscure code even when there is no strong evidence for this improvement.

Premature optimization always hurts readability.

Sample Code

Wrong

userIsValid() && logUserIn();

// this expression is short circuit
// Does not value second statament
// Unless the first one is true

functionDefinedOrNot && functionDefinedOrNot();

// in some languages undefined works as a false
// If functionDefinedOrNot is not defined does
// not raise an erron and neither runs
Enter fullscreen mode Exit fullscreen mode

Right

if (userIsValid()) {
    logUserIn();
}

if(typeof functionDefinedOrNot == 'function') {  
    functionDefinedOrNot();
}
// Checking for a type is another code smell
Enter fullscreen mode Exit fullscreen mode

Detection

[X] Semi-Automatic

We can check if the functions are impure and change the short circuit to an IF.

Some actual linters warn us of this problem

Tags

  • Premature Optimizacion

Conclusion

Don't try to look smart.

We are not in the 50s anymore.

Be a team developer.

Relations

Credits

Photo by Michael Dziedzic on Unsplash


A computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match.

Bill Bryson


This article is part of the CodeSmell Series.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .