Bird
Raised Fist0
Kotlinprogramming~20 mins

RunCatching for safe execution in Kotlin - Mini Project: Build & Apply

Choose your learning style10 modes available
RunCatching for safe execution
📖 Scenario: Imagine you are writing a small Kotlin program that divides numbers. Sometimes, the divisor might be zero, which causes an error. You want to handle this safely without crashing the program.
🎯 Goal: You will build a Kotlin program that uses runCatching to safely execute a division operation and handle any errors gracefully.
📋 What You'll Learn
Create a function that divides two integers
Use runCatching to safely execute the division
Store the result or the error message
Print the final output showing success or failure
💡 Why This Matters
🌍 Real World
Handling errors safely is important in apps that deal with user input or external data, like calculators or data processors.
💼 Career
Many Kotlin jobs require writing robust code that does not crash on bad input. Using <code>runCatching</code> is a common way to handle exceptions cleanly.
Progress0 / 4 steps
1
Create a division function
Write a function called divide that takes two Int parameters named numerator and denominator. The function should return the result of dividing numerator by denominator as an Int.
Kotlin
Hint

Use the / operator to divide the two integers inside the function.

2
Use runCatching to safely execute division
Create a variable called result that uses runCatching to call the divide function with 10 as numerator and 0 as denominator.
Kotlin
Hint

Use runCatching { divide(10, 0) } to catch any exceptions from dividing by zero.

3
Extract success or failure message
Create a variable called message that uses result.fold to return the success value as a string or the failure exception message.
Kotlin
Hint

Use fold on result to handle both success and failure cases.

4
Print the final message
Write a println statement to display the message variable.
Kotlin
Hint

Use println(message) to show the result or error message.

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