WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Kotlin · Guru · question 94 of 100

How does Kotlin’s approach to handling exceptions compare to languages with checked exceptions, like Java, or languages with more expressive error handling, like Rust? Discuss the trade-offs involved in Kotlin’s design.?

📕 Buy this interview preparation book: 100 Kotlin questions & answers — PDF + EPUB for $5

Unlike Java, Kotlin does not have checked exceptions. When handling errors, Kotlin chooses to use unchecked exceptions, which are not required to be handled in the code. Rust, on the other hand, uses a combination of result types and unwrapping/checking functions to handle errors in a more expressive manner.

Kotlin’s approach to exception handling has a few trade-offs. On one hand, not having to declare checked exceptions can simplify the code, as it avoids the need to handle exceptions that may never occur. This can lead to more concise and readable code. On the other hand, it can make error handling less explicit and lead to unexpected runtime errors if exceptions are not properly handled.

In Kotlin, as in Java, exceptions are thrown when an exceptional situation arises. Kotlin provides try-catch blocks to handle these exceptions. When an exception is thrown, it can be caught by a try-catch block, and then the code in the catch block can react to the exception. Kotlin also provides the use of the ‘finally‘ block, where the code inside the block is executed regardless of whether an exception has been thrown or not. If an exception is thrown, then the code inside the ‘finally‘ block is executed after the catch block.

Here is an example of using try-catch in Kotlin:

fun divide(a: Int, b: Int): Int? {
    return try {
        a / b
    } catch (e: ArithmeticException) {
        null
    } finally {
        println("Division operation is done.")
    }
}

fun main() {
    val result = divide(10, 0)
    if (result == null) {
        println("Division by zero error occurred.")
    } else {
        println("Result: $result")
    }
}

In this example, the ‘divide‘ function divides two integers, but catches the ‘ArithmeticException‘ that would occur if the second parameter is zero. If an exception is caught, ‘null‘ is returned. Regardless of whether an exception is thrown or not, the ‘finally‘ block prints a message that the operation is done.

In contrast, Rust provides result types with two possible values: ‘Ok‘ or ‘Err‘. Functions returning ‘Ok‘ are considered successful and return the result, while functions returning ‘Err‘ indicate failure and return an error value. Rust allows for the use of the ‘?‘ operator on result types to chain multiple operations that return results together. If any of them return ‘Err‘, then the entire expression is considered an ‘Err‘ and the error is propagated up the call stack.

Here is an example of using result types in Rust:

fn divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        return Err(String::from("Division by zero error occurred."));
    }
    Ok(a / b)
}

fn main() {
    match divide(10, 0) {
        Ok(result) => println!("Result: {}", result),
        Err(error) => println!("{}", error),
    }
}

In this example, the ‘divide‘ function returns a ‘Result‘ type with an ‘Ok‘ value if the second parameter is not zero, or an ‘Err‘ value if the second parameter is zero. The main function uses a pattern match to handle the result. If the result is ‘Ok‘, then the result is printed, otherwise the error message is printed.

Overall, while Kotlin’s approach to exception handling can simplify code, it does have some trade-offs in terms of the explicitness and safety of error handling. On the other hand, Rust’s approach of using result types may initially increase the complexity of the code, but it provides more expressive error handling and helps ensure that errors are properly handled.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Kotlin interview — then scores it.
📞 Practice Kotlin — free 15 min
📕 Buy this interview preparation book: 100 Kotlin questions & answers — PDF + EPUB for $5

All 100 Kotlin questions · All topics