Kotlin Code Smell 6 - Boolean Variables
Rethinking Booleans: Embrace Polymorphism for Cleaner, Extendable Code

I've started to work as a software engineer at 2014, however, I started to write code at high-school.
My first language was Assembly, but still, I fall in love with the possibilities to make the computer to do as you wish, shortly after that I started to write in C.
Later on I studied a practical engineering in electricity, and during this time discovered that I preferred much more writing code than design electrical components.
As a result of this understanding I decided to switch and study bachelor degree in computer science in Reichman university, where the focus was of the Java language.
Today I'm working at SumUp using Kotlin, SpringBoot & Micronaut, Cassandra and Kafka
TL;DR: Avoid using boolean variables, as they lead to the use of if statements. Instead, create polymorphic states.
Problems
Lack of extensibility
Comparison issues in some languages
Solutions
- If a boolean variable maps to a real-world entity, it is acceptable. Otherwise, model it as a state to promote extensibility. This approach aligns with the Open/Closed Principle.
Examples
- Usage of flags
Exceptions
- Real-world true/false rules
Sample Code
wrong
fun processBatch(
useLogin: Boolean,
deleteEntries: Boolean,
beforeToday: Boolean
) {
...
}
Right
fun processBatch(
useLogin: LoginStrategy,
deleteEntries: DeletePolicy,
beforeToday: OffsetDateTime
) {
...
}
Conclusion
Exercise caution when using booleans. Flags make code maintenance and extension challenging. Gain a better understanding of the domain and consider migrating to the state design pattern. Utilize polymorphism instead of if statements or when expressions (pattern matching).
More Info
- FlagArgument by Martin Fowler




