Logo
Published on

Kotlin’s runCatching – Robust Error Handling Made Easy

Authors
  • Name
    Twitter

In Kotlin, error handling is an essential part of writing reliable and robust code. One useful function that Kotlin provides for error handling is runCatching. runCatching is a higher-order function that allows you to encapsulate a block of code that might throw an exception and handle it gracefully.

The syntax for runCatching is straightforward. It’s an extension function on any object and takes a lambda as an argument, which represents the code you want to run. The lambda can contain any code that may throw an exception, such as accessing a nullable property, parsing a string, or performing I/O operations.

Here’s an example of how runCatching can be used to safely parse an integer from a string:

val input = "123"  
val result = runCatching { input.toInt() }  
if (result.isSuccess) {  
    val parsedInt = result.getOrNull()  
    println("Parsed integer: $parsedInt")  
} else {  
    val exception = result.exceptionOrNull()  
    println("Failed to parse integer: $exception")  
}

In this example, runCatching encapsulates the input.toInt() code block, which may throw a NumberFormatException if the input string cannot be parsed into an integer. The result of runCatching is a Result object that represents the outcome of the code block execution. The isSuccess property indicates whether the code block executed successfully or not. You can use getOrNull() to retrieve the result if it’s successful, or exceptionOrNull() to retrieve the exception if it failed.

runCatching also allows you to specify a custom exception handler by chaining the onFailure function. Here’s an example:

val input = "abc"  
val result = runCatching { input.toInt() }  
    .onFailure { exception ->  
        println("Failed to parse integer: $exception")  
        // Custom error handling logic goes here  
    }

In this example, the onFailure lambda will be called with the exception as its argument if the input.toInt() code block fails, allowing you to handle the error in a custom way.

In conclusion, runCatching is a powerful error-handling tool in Kotlin that helps you write more robust and reliable code. It allows you to encapsulate code blocks that may throw exceptions and provides a convenient way to handle the outcomes of those blocks. Whether you need to parse data, perform I/O operations, or access nullable properties, runCatching can help you handle errors in a concise and efficient manner.