Kotlin Code Smell 6 - Boolean Variables

Kotlin Code Smell 6 - Boolean Variables

Rethinking Booleans: Embrace Polymorphism for Cleaner, Extendable Code

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

Credits