RunCatching helps you run code safely without crashing your program. It catches errors so you can handle them nicely.
RunCatching for safe execution in 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.
val result = runCatching { "123".toInt() } result.onSuccess { println("Number: $it") } .onFailure { println("Error: ${it.message}") }
val result = runCatching { "abc".toInt() } result.onSuccess { println("Number: $it") } .onFailure { println("Error: ${it.message}") }
val result = runCatching { val list = listOf(1, 2, 3) list[5] // This will throw an exception } println(result.getOrElse { -1 })
This program tries to convert a string with letters to a number. It catches the error and prints a friendly message instead of crashing.
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}") } }
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.
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
runCatching in Kotlin?Solution
Step 1: Understand what
runCatchingdoesrunCatchingruns a block of code and catches any exceptions that happen inside it.Step 2: Identify the main purpose
This helps keep the program running smoothly by handling errors safely without crashing.Final Answer:
To execute code and catch exceptions safely without crashing the program -> Option AQuick Check:
runCatching = safe execution [OK]
- Thinking runCatching runs code conditionally
- Confusing runCatching with threading
- Assuming it converts types automatically
runCatching in Kotlin?Solution
Step 1: Recall the syntax of runCatching
runCatchingtakes a lambda block with curly braces to run code safely.Step 2: Match the correct syntax
val result = runCatching { someFunction() } uses curly braces and callssomeFunction()inside, which is correct.Final Answer:
val result = runCatching { someFunction() } -> Option CQuick Check:
runCatching uses braces { } [OK]
- Using parentheses instead of braces
- Trying to call runCatching like a function with arrow
- Accessing runCatching as an object
val result = runCatching { 10 / 0 }
println(result.isSuccess)Solution
Step 1: Analyze the code inside runCatching
The code tries to divide 10 by 0, which causes an exception (ArithmeticException).Step 2: Understand runCatching result
runCatching catches the exception, so no crash happens. TheisSuccessproperty will be false because the block failed.Final Answer:
false -> Option DQuick Check:
Exception caught means isSuccess = false [OK]
- Expecting true because code runs
- Thinking exception is thrown outside runCatching
- Confusing isSuccess with isFailure
runCatching:val result = runCatching {
val number = "abc".toInt()
}
println(result.getOrNull())Solution
Step 1: Understand the code inside runCatching
Trying to convert "abc" to Int causes NumberFormatException, but runCatching catches it.Step 2: Check what getOrNull() returns
Since exception happened,getOrNull()returns null safely without crashing.Final Answer:
No error, prints null because conversion fails -> Option AQuick Check:
Exception caught means getOrNull() = null [OK]
- Expecting exception to crash program
- Thinking getOrNull returns original string
- Assuming syntax error in code block
runCatching and collect only the successful results. Which Kotlin code snippet correctly does this?Solution
Step 1: Understand the goal
We want to convert strings to integers safely, ignoring failures, and collect only successful integers.Step 2: Analyze each option
val numbers = list.map { runCatching { it.toInt() }.getOrNull() }.filterNotNull() uses runCatching to catch exceptions, thengetOrNull()returns integer or null, andfilterNotNull()removes nulls, collecting only successful parses.Final Answer:
val numbers = list.map { runCatching { it.toInt() }.getOrNull() }.filterNotNull() -> Option BQuick Check:
Safe parse + filter null = val numbers = list.map { runCatching { it.toInt() }.getOrNull() }.filterNotNull() [OK]
- Using getOrThrow() which throws on failure
- Filtering nulls before catching exceptions
- Using exceptionOrNull() which returns exceptions, not values
Ready to prove it?
Pass the test and this pattern moves unknown
