When comparing to booleans, we perform magic castings and get unexpected results.
TL;DR: Don't compare against true. Either you are true, or false or you shouldn't compare
-
Hidden castings
-
The least surprise principle violation.
-
Fail Fast principle violation
-
Use booleans
-
Don't mix booleans with boolean castable objects
Many languages cast values to boolean crossing domains.
#!/bin/bash
if [ false ]; then
echo "True"
else
echo "False"
fi
# this evaluates to true since
# "false" is a non-empty string
if [ false ] = true; then
echo "True"
else
echo "False"
fi
# this also evaluates to true
#!/bin/bash
if false ; then
echo "True"
else
echo "False"
fi
# this evaluates to false
[X] Automatic
Linters can check for explicit comparisons and warnings.
- Castings
It is a common industry practice to use many non booleans as booleans.
We should be very strict when using booleans.
Code Smell 69 - Big Bang (JavaScript Ridiculous Castings)
Photo by Michael Held on Unsplash
If it doesn’t work, it doesn’t matter how fast it doesn’t work.
Mich Ravera
Software Engineering Great Quotes
This article is part of the CodeSmell Series.