Kotlin Code Smell 6 - Boolean Variables
Rethinking Booleans: Embrace Polymorphism for Cleaner, Extendable Code
Play this article
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