Bird
Raised Fist0
Kotlinprogramming~5 mins

RunCatching for safe execution in Kotlin

Choose your learning style10 modes available
Introduction

RunCatching helps you run code safely without crashing your program. It catches errors so you can handle them nicely.

When you want to try code that might fail, like reading a file.
When calling a function that can throw an error and you want to avoid crashes.
When you want to handle success and failure separately in a clean way.
When you want to keep your program running even if something goes wrong.
When you want to log or show a friendly message if an error happens.
Syntax
Kotlin
val result = runCatching {
    // code that might throw an exception
}

result.onSuccess { value ->
    // handle success
}.onFailure { error ->
    // handle error
}

runCatching runs the code inside the curly braces and catches exceptions.

The result holds success or failure, letting you handle both cases.

Examples
This tries to convert a string to a number. If it works, it prints the number. If it fails, it prints the error.
Kotlin
val result = runCatching {
    "123".toInt()
}

result.onSuccess { println("Number: $it") }
      .onFailure { println("Error: ${it.message}") }
This tries to convert a non-number string, which causes an error. The error message is printed.
Kotlin
val result = runCatching {
    "abc".toInt()
}

result.onSuccess { println("Number: $it") }
      .onFailure { println("Error: ${it.message}") }
This tries to access an invalid list index. If it fails, it returns -1 instead.
Kotlin
val result = runCatching {
    val list = listOf(1, 2, 3)
    list[5] // This will throw an exception
}

println(result.getOrElse { -1 })
Sample Program

This program tries to convert a string with letters to a number. It catches the error and prints a friendly message instead of crashing.

Kotlin
fun main() {
    val input = "100a"
    val result = runCatching {
        input.toInt()
    }

    result.onSuccess { number ->
        println("Converted number: $number")
    }.onFailure { error ->
        println("Failed to convert: ${error.message}")
    }
}
OutputSuccess
Important Notes

You can use getOrNull() to get the value or null if it failed.

Use getOrElse { defaultValue } to provide a fallback value on failure.

RunCatching helps keep your code clean by avoiding try-catch blocks everywhere.

Summary

RunCatching runs code safely and catches errors.

It lets you handle success and failure clearly.

Use it to keep your program running smoothly even if something goes wrong.

Practice

(1/5)
1. What is the main purpose of runCatching in Kotlin?
easy
A. To execute code and catch exceptions safely without crashing the program
B. To run code only if a condition is true
C. To create a new thread for running code
D. To convert a value to a string safely

Solution

  1. Step 1: Understand what runCatching does

    runCatching runs a block of code and catches any exceptions that happen inside it.
  2. Step 2: Identify the main purpose

    This helps keep the program running smoothly by handling errors safely without crashing.
  3. Final Answer:

    To execute code and catch exceptions safely without crashing the program -> Option A
  4. Quick Check:

    runCatching = safe execution [OK]
Hint: runCatching catches errors to keep code safe [OK]
Common Mistakes:
  • Thinking runCatching runs code conditionally
  • Confusing runCatching with threading
  • Assuming it converts types automatically
2. Which of the following is the correct syntax to use runCatching in Kotlin?
easy
A. val result = runCatching -> someFunction()
B. val result = runCatching(someFunction())
C. val result = runCatching { someFunction() }
D. val result = runCatching.someFunction()

Solution

  1. Step 1: Recall the syntax of runCatching

    runCatching takes a lambda block with curly braces to run code safely.
  2. Step 2: Match the correct syntax

    val result = runCatching { someFunction() } uses curly braces and calls someFunction() inside, which is correct.
  3. Final Answer:

    val result = runCatching { someFunction() } -> Option C
  4. Quick Check:

    runCatching uses braces { } [OK]
Hint: Use curly braces {} to pass code block to runCatching [OK]
Common Mistakes:
  • Using parentheses instead of braces
  • Trying to call runCatching like a function with arrow
  • Accessing runCatching as an object
3. What will be the output of this Kotlin code?
val result = runCatching { 10 / 0 }
println(result.isSuccess)
medium
A. true
B. null
C. Exception thrown
D. false

Solution

  1. Step 1: Analyze the code inside runCatching

    The code tries to divide 10 by 0, which causes an exception (ArithmeticException).
  2. Step 2: Understand runCatching result

    runCatching catches the exception, so no crash happens. The isSuccess property will be false because the block failed.
  3. Final Answer:

    false -> Option D
  4. Quick Check:

    Exception caught means isSuccess = false [OK]
Hint: Divide by zero causes failure, so isSuccess is false [OK]
Common Mistakes:
  • Expecting true because code runs
  • Thinking exception is thrown outside runCatching
  • Confusing isSuccess with isFailure
4. Identify the error in this Kotlin code using runCatching:
val result = runCatching {
    val number = "abc".toInt()
}
println(result.getOrNull())
medium
A. No error, prints null because conversion fails
B. Throws NumberFormatException outside runCatching
C. Syntax error in runCatching block
D. getOrNull() returns the string "abc"

Solution

  1. Step 1: Understand the code inside runCatching

    Trying to convert "abc" to Int causes NumberFormatException, but runCatching catches it.
  2. Step 2: Check what getOrNull() returns

    Since exception happened, getOrNull() returns null safely without crashing.
  3. Final Answer:

    No error, prints null because conversion fails -> Option A
  4. Quick Check:

    Exception caught means getOrNull() = null [OK]
Hint: runCatching catches exceptions, getOrNull returns null on failure [OK]
Common Mistakes:
  • Expecting exception to crash program
  • Thinking getOrNull returns original string
  • Assuming syntax error in code block
5. You want to safely parse a list of strings to integers using runCatching and collect only the successful results. Which Kotlin code snippet correctly does this?
hard
A. val numbers = list.map { runCatching { it.toInt() }.exceptionOrNull() }
B. val numbers = list.map { runCatching { it.toInt() }.getOrNull() }.filterNotNull()
C. val numbers = list.map { it.toInt() }.filter { it != null }
D. val numbers = list.map { runCatching { it.toInt() }.getOrThrow() }

Solution

  1. Step 1: Understand the goal

    We want to convert strings to integers safely, ignoring failures, and collect only successful integers.
  2. Step 2: Analyze each option

    val numbers = list.map { runCatching { it.toInt() }.getOrNull() }.filterNotNull() uses runCatching to catch exceptions, then getOrNull() returns integer or null, and filterNotNull() removes nulls, collecting only successful parses.
  3. Final Answer:

    val numbers = list.map { runCatching { it.toInt() }.getOrNull() }.filterNotNull() -> Option B
  4. Quick Check:

    Safe parse + filter null = val numbers = list.map { runCatching { it.toInt() }.getOrNull() }.filterNotNull() [OK]
Hint: Use getOrNull() then filterNotNull() to keep successful parses [OK]
Common Mistakes:
  • Using getOrThrow() which throws on failure
  • Filtering nulls before catching exceptions
  • Using exceptionOrNull() which returns exceptions, not values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard