Bird
Raised Fist0
Kotlinprogramming~3 mins

Why Nullable types with ? suffix in Kotlin? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if your program could avoid crashes just by knowing when something might be missing?

The Scenario

Imagine you have a list of friends' phone numbers, but some friends haven't shared their number yet. You try to write code that assumes every friend has a number, but sometimes the number is missing.

The Problem

Without a clear way to say "this value might be missing," your program crashes or behaves unpredictably when it encounters a missing number. You have to write many checks everywhere, making your code messy and error-prone.

The Solution

Nullable types with the ? suffix let you clearly say "this value can be missing." The language then forces you to handle these cases safely, preventing crashes and making your code cleaner and more reliable.

Before vs After
✗ Before
val phoneNumber: String = getFriendNumber()
// crashes if number is missing
✓ After
val phoneNumber: String? = getFriendNumber()
// safely handles missing number
What It Enables

You can write safer programs that clearly handle missing or optional data without unexpected crashes.

Real Life Example

When building a contact app, some contacts might not have an email address. Using nullable types lets you store and check for emails safely.

Key Takeaways

Nullable types explicitly mark values that can be missing.

This prevents many common errors and crashes.

It makes your code clearer and easier to maintain.

Practice

(1/5)
1. What does adding a ? after a type in Kotlin mean?
easy
A. The variable is immutable.
B. The variable can hold a null value.
C. The variable is a constant.
D. The variable is a function.

Solution

  1. Step 1: Understand Kotlin type suffix

    In Kotlin, adding ? after a type means the variable can hold null.
  2. Step 2: Compare with non-nullable types

    Without ?, variables cannot be null and will cause errors if assigned null.
  3. Final Answer:

    The variable can hold a null value. -> Option B
  4. Quick Check:

    Nullable type = variable can be null [OK]
Hint: Remember: ? means nullable type in Kotlin [OK]
Common Mistakes:
  • Thinking ? makes variable immutable
  • Confusing ? with constant declaration
  • Assuming ? means function type
2. Which of the following is the correct syntax to declare a nullable String variable in Kotlin?
easy
A. var name: String?
B. var name: ?String
C. var name: String!
D. var name: nullable String

Solution

  1. Step 1: Recall Kotlin nullable syntax

    Kotlin uses ? after the type name to mark it nullable, e.g., String?.
  2. Step 2: Check each option

    var name: String? uses String? correctly. Options A, B, and D use invalid syntax.
  3. Final Answer:

    var name: String? -> Option A
  4. Quick Check:

    Nullable syntax = type followed by ? [OK]
Hint: Put ? right after the type name for nullable [OK]
Common Mistakes:
  • Placing ? before the type
  • Using ! instead of ?
  • Writing 'nullable' keyword explicitly
3. What will be the output of this Kotlin code?
var text: String? = null
println(text?.length ?: "No length")
medium
A. 0
B. null
C. No length
D. Throws NullPointerException

Solution

  1. Step 1: Understand safe call and Elvis operator

    text?.length safely accesses length if text is not null; else returns null. The Elvis operator ?: provides "No length" if left side is null.
  2. Step 2: Evaluate given code

    Since text is null, text?.length is null, so the expression prints "No length".
  3. Final Answer:

    No length -> Option C
  4. Quick Check:

    Safe call + Elvis = fallback value [OK]
Hint: Safe call ?. returns null safely; ?: provides default [OK]
Common Mistakes:
  • Expecting NullPointerException on null safe call
  • Thinking null?.length returns 0
  • Ignoring Elvis operator fallback
4. Identify the error in this Kotlin code snippet:
var number: Int? = 10
var result: Int = number + 5
medium
A. Variable 'result' should be nullable.
B. Variable 'number' cannot be nullable.
C. Missing semicolon after declaration.
D. Cannot add Int? and Int directly.

Solution

  1. Step 1: Check type compatibility

    number is nullable Int?, but result expects non-null Int. Adding nullable and non-null directly is not allowed.
  2. Step 2: Understand Kotlin's null safety

    You must safely unwrap number before adding, e.g., using number ?: 0 or safe call.
  3. Final Answer:

    Cannot add Int? and Int directly. -> Option D
  4. Quick Check:

    Nullable + non-null Int needs safe unwrap [OK]
Hint: Nullable Int can't be used directly in arithmetic [OK]
Common Mistakes:
  • Assuming nullable Int can be used like Int
  • Ignoring need for safe call or Elvis operator
  • Thinking semicolon is required in Kotlin
5. You have a nullable list of nullable Strings: val items: List?. How do you safely print the length of the first item or print 0 if the list or first item is null?
hard
A. println(items?.get(0)?.length ?: 0)
B. println(items[0].length)
C. println(items!!.get(0)!!.length)
D. println(items?.get(0).length ?: 0)

Solution

  1. Step 1: Analyze nullable types

    items can be null, and its elements can be null. So both list and first item need safe calls.
  2. Step 2: Use safe calls and Elvis operator

    items?.get(0)?.length ?: 0 safely accesses first item length or returns 0 if null.
  3. Final Answer:

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

    Safe calls chain + fallback = safe nullable access [OK]
Hint: Chain ?. for each nullable and use ?: for default [OK]
Common Mistakes:
  • Using !! which throws exception if null
  • Missing safe call on first item
  • Assuming list or item can't be null
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