Bird
Raised Fist0
Kotlinprogramming~10 mins

Safe call operator (?.) in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Safe call operator (?.)
Start
↓
Check if object is null
Yes|No↓
Return null
↓
Continue with result
The safe call operator checks if an object is null before accessing its property or method, avoiding errors by returning null if the object is null.
Execution Sample
Kotlin
val name: String? = null
val length = name?.length
println(length)
This code safely accesses the length of a nullable string, printing null if the string is null.
Execution Table
StepExpressionObject Null?ActionResult
1val name: String? = nullN/AAssign null to namename = null
2name?.lengthYesReturn null instead of accessing lengthlength = null
3println(length)N/APrint length valueOutput: null
💡 Safe call returns null because name is null, avoiding error.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
nameundefinednullnullnull
lengthundefinedundefinednullnull
Key Moments - 2 Insights
Why does length become null instead of causing an error?
Because the safe call operator (?.) checks if name is null before accessing length. In execution_table step 2, since name is null, it returns null safely.
What happens if name is not null?
If name is not null, the safe call operator accesses the property normally, as shown in execution_table step 2's 'No' branch in concept_flow.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what is the value of length?
A0
Bnull
CThrows error
DUndefined
💡 Hint
Check the 'Result' column in step 2 of execution_table where length is assigned.
At which step does the safe call operator prevent an error?
AStep 2
BStep 3
CStep 1
DNo step
💡 Hint
Look at the 'Action' column in step 2 where it returns null instead of accessing length.
If name was "Hello", what would length be at step 2?
AThrows error
Bnull
C5
DUndefined
💡 Hint
Recall that "Hello" has 5 characters; safe call accesses length normally if not null.
Concept Snapshot
Safe call operator (?.) in Kotlin:
- Used to safely access properties or methods of nullable objects.
- Syntax: object?.property or object?.method()
- Returns null if object is null, avoiding NullPointerException.
- Useful for chaining calls on nullable types.
- Example: val length = name?.length
- If name is null, length is null; else length is name's length.
Full Transcript
The safe call operator (?.) in Kotlin helps avoid errors when working with nullable objects. It checks if the object is null before accessing its property or method. If the object is null, it returns null instead of causing an error. For example, if a nullable string 'name' is null, then 'name?.length' safely returns null. This prevents the program from crashing due to null pointer exceptions. The execution table shows step-by-step how the variable 'length' becomes null safely. This operator is very useful when you want to work with nullable data without writing extra null checks.

Practice

(1/5)
1. What does the safe call operator ?. do in Kotlin?
easy
A. It forces the program to crash if the object is null.
B. It converts a non-null object to null.
C. It accesses a property or calls a function only if the object is not null.
D. It always returns a default value when the object is null.

Solution

  1. Step 1: Understand the purpose of the safe call operator

    The safe call operator ?. is used to safely access properties or call functions on objects that might be null.
  2. Step 2: Behavior when object is null

    If the object is null, the operator returns null instead of throwing an error or crashing the program.
  3. Final Answer:

    It accesses a property or calls a function only if the object is not null. -> Option C
  4. Quick Check:

    Safe call operator = Access if not null [OK]
Hint: Safe call operator skips calls on null objects [OK]
Common Mistakes:
  • Thinking it crashes on null
  • Confusing with non-null assertion operator (!!)
  • Assuming it provides default values
2. Which of the following is the correct syntax to safely call the length property of a nullable String name?
easy
A. val len = name.length
B. val len = name?.length
C. val len = name!!length
D. val len = name?length

Solution

  1. Step 1: Identify the safe call syntax

    The safe call operator is ?., used as object?.property or object?.function().
  2. Step 2: Check each option

    val len = name.length uses . without safety, which can cause a crash if name is null. val len = name?.length correctly uses ?.. val len = name!!length uses !! incorrectly with property access. val len = name?length uses invalid syntax ?length.
  3. Final Answer:

    val len = name?.length -> Option B
  4. Quick Check:

    Safe call syntax = ?. [OK]
Hint: Safe call uses ?. between object and property [OK]
Common Mistakes:
  • Using . without safe call on nullable
  • Confusing !! with ?.
  • Writing invalid syntax like ?property
3. What is the output of this Kotlin code?
val text: String? = null
println(text?.length)
medium
A. 0
B. Throws NullPointerException
C. Empty string
D. null

Solution

  1. Step 1: Analyze the nullable variable

    The variable text is null, so accessing text?.length uses the safe call operator.
  2. Step 2: Evaluate the safe call result

    Since text is null, text?.length returns null instead of crashing or returning 0.
  3. Final Answer:

    null -> Option D
  4. Quick Check:

    Null safe call on null = null [OK]
Hint: Safe call returns null if object is null [OK]
Common Mistakes:
  • Expecting 0 as length of null
  • Thinking it throws an exception
  • Assuming empty string output
4. Find the error in this Kotlin code snippet:
val user: User? = null
val nameLength = user.length?.toString()
medium
A. The safe call operator should be before length, like user?.length.
B. Safe call operator is used incorrectly on a non-nullable property.
C. The variable user cannot be null.
D. The toString() function cannot be called on an Int.

Solution

  1. Step 1: Identify the nullable object and property access

    user is nullable, so accessing length directly without safe call is unsafe.
  2. Step 2: Correct safe call placement

    The safe call operator must be used on the nullable object: user?.length. The code user.length?.toString() tries to access length on a nullable object without safety, causing an error.
  3. Final Answer:

    The safe call operator should be before length, like user?.length. -> Option A
  4. Quick Check:

    Safe call must be on nullable object [OK]
Hint: Put ?. right after nullable variable name [OK]
Common Mistakes:
  • Using safe call after property instead of before
  • Ignoring nullability of variable
  • Misunderstanding function call on nullable
5. Given a nullable list of nullable strings val items: List?, which expression safely gets the length of the first string or returns null if any part is null?
hard
A. items?.get(0)?.length
B. items.get(0).length
C. items!![0]!!.length
D. items?[0].length

Solution

  1. Step 1: Understand the nullability

    items can be null, and its elements can also be null. So both the list and the first element might be null.
  2. Step 2: Use safe calls to avoid errors

    To safely get the length of the first string, use items?.get(0)?.length. This returns null if items or the first element is null.
  3. Final Answer:

    items?.get(0)?.length -> Option A
  4. Quick Check:

    Chain safe calls for nested nullables [OK]
Hint: Chain ?. for each nullable level [OK]
Common Mistakes:
  • Using !! which throws exception if null
  • Missing safe call on list or element
  • Using invalid syntax like ?[0]
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