Using boolean variables as flags exposes accidental implementation and pollute the code with Ifs.
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).
Stay updated with my latest thoughts and ideas by registering for my newsletter. Connect with me on LinkedIn or Twitter. Let's stay connected and keep the conversation going!
More Info
- FlagArgument by Martin Fowler
Top comments (0)