Sling Academy
Home/Kotlin/Kotlin: Duplicate Labels in `when` Expression

Kotlin: Duplicate Labels in `when` Expression

Last updated: December 01, 2024

The when expression in Kotlin is a powerful feature that allows developers to split execution paths based on predefined conditions, similar to a switch-case statement in other languages. However, unlike those languages, Kotlin provides more flexibility and robustness, preventing common pitfalls like duplicate labels, which can lead to unexpected behavior or compile-time errors.

In this article, we'll delve into Kotlin's when expression and explore how it handles potential issues, such as duplicate labels, offering clearer code structure and better error checking. Understanding these aspects can greatly enhance code readability and prevent logical errors in your Kotlin programs.

Understanding the when Expression

The when expression in Kotlin can be used in a wide variety of scenarios: transforming input, controlling application flow, and more. Here’s a basic example to start:


fun main() {
   val a = 5
   val result = when(a) {
       1 -> "One"
       2 -> "Two"
       5 -> "Five"
       else -> "Unknown"
   }
   println(result)  // Outputs: Five
}

This simple program demonstrates assigning strings to numbers. When the value matches a case in the when block, the corresponding string is assigned to result. The else block captures any other values not explicitly enumerated, providing a fallback similar to the default case in a switch statement.

Handling Duplicate Labels

Unlike other languages, Kotlin handles duplicate labels in when expressions at compile time, preventing execution conflicts that could arise. By enforcing rule compliance, Kotlin ensures each condition and value range is unique within a when block.

Consider this attempt to create duplicate cases:


fun checkNumber(num: Int): String {
    return when(num) {
        1 -> "One"
        2 -> "Two"
        2 -> "Duplicate"
        else -> "Unknown"
    }
}

The above code will result in a compile error such as:


Error: Duplicate label in 'when'.

This prevents ambiguity and logical errors, compelling the programmer to resolve conflicts by ensuring each case is unique.

Combining Case Labels

In scenarios requiring multiple values to be addressed similarly, Kotlin allows combining case labels, making it straightforward to handle multiple inputs cohesively without duplication:


fun checkChar(c: Char): String {
    return when(c) {
        'a', 'e', 'i', 'o', 'u' -> "Vowel"
        in 'b'..'z' -> "Consonant"
        else -> "Non-Alphanumeric"
    }
}

Here, characters 'a', 'e', 'i', 'o', and 'u' are combined to trigger the output "Vowel", thus avoiding label duplication while maintaining clean, understandable code.

Using Conditions in when Expression

Beyond simple values, Kotlin's when expression supports conditions, further enhancing its power and preventing potential duplication logically:


fun categorizeNumber(number: Int): String {
    return when {
        number < 5 -> "Small"
        number in 5..10 -> "Medium"
        number > 10 -> "Large"
        else -> "Unknown"
    }
}

Instead of comparing with a discrete value, the when expression checks against conditions like ranges or logical predicates to categorize the numbers, effortlessly avoiding duplicate logic paths.

Conclusion

Kotlin's when expression is an excellent tool for controlling flow and categorizing data, with strict safeguards against common errors like duplicate labels. By ensuring unique paths and providing flexible syntax, when expressions lead to fewer errors, cleaner code, and quicker debugging. As Kotlin evolves, maintaining vigilance against common pitfalls remains essential, ensuring robust and error-free code.

Next Article: Kotlin: Missing Generic Type Arguments Warning

Previous Article: Kotlin: Type Cast May Fail at Runtime Warning

Series: Common Errors in Kotlin and How to Fix Them

Kotlin

You May Also Like

  • How to Use Modulo for Cyclic Arithmetic in Kotlin
  • Kotlin: Infinite Loop Detected in Code
  • Fixing Kotlin Error: Index Out of Bounds in List Access
  • Setting Up JDBC in a Kotlin Application
  • Creating a File Explorer App with Kotlin
  • How to Work with APIs in Kotlin
  • What is the `when` Expression in Kotlin?
  • Writing a Script to Rename Multiple Files Programmatically in Kotlin
  • Using Safe Calls (`?.`) to Avoid NullPointerExceptions in Kotlin
  • Chaining Safe Calls for Complex Operations in Kotlin
  • Using the Elvis Operator for Default Values in Kotlin
  • Combining Safe Calls and the Elvis Operator in Kotlin
  • When to Avoid the Null Assertion Operator (`!!`) in Kotlin
  • How to Check for Null Values with `if` Statements in Kotlin
  • Using `let` with Nullable Variables for Scoped Operations in Kotlin
  • Kotlin: How to Handle Nulls in Function Parameters
  • Returning Nullable Values from Functions in Kotlin
  • Safely Accessing Properties of Nullable Objects in Kotlin
  • How to Use `is` for Nullable Type Checking in Kotlin