Accessing elements safely in Kotlin - Mini Project: Build & Apply
cities with these exact city names in order: "Paris", "London", "New York", "Tokyo", "Sydney".Use listOf to create the list with the exact city names.
index and set it to 3.Use val index = 3 to set the index.
selectedCity that safely gets the city at index from cities. If the index is out of range, set selectedCity to the string "Unknown city". Use Kotlin's safe access methods.Use getOrNull(index) to get the city safely and the Elvis operator ?: to provide a default.
println statement to print the value of selectedCity.Use println(selectedCity) to display the city.
Practice
What does the Kotlin expression map[key] ?: "default" do?
Solution
Step 1: Understand map access with
Accessing[]map[key]returns the value ifkeyexists, ornullif it doesn't.Step 2: Use the Elvis operator
The expression?:for fallback?: "default"means if the left side isnull, return "default" instead.Final Answer:
Returns the value forkeyif it exists, otherwise returns "default". -> Option BQuick Check:
map[key] ?: default = safe access with fallback [OK]
- Thinking it throws an error if key is missing
- Assuming it always returns default
- Confusing with removing keys
Which of the following is the correct Kotlin syntax to safely get the element at index 2 from a list myList, returning -1 if the index is out of bounds?
Solution
Step 1: Understand safe list access methods
myList.getOrNull(2)returns the element at index 2 ornullif out of bounds.Step 2: Use Elvis operator for default
?: -1returns-1ifgetOrNullreturnsnull.Final Answer:
myList.getOrNull(2) ?: -1 -> Option AQuick Check:
getOrNull + ?: = safe get with fallback [OK]
- Using myList[2] which throws exception if index invalid
- Using get(2) which throws exception if index invalid
- Confusing getOrElse syntax
What is the output of this Kotlin code?
val map = mapOf("a" to 1, "b" to 2)
println(map["c"] ?: 0)Solution
Step 1: Check map access for key "c"
Key "c" does not exist in the map, somap["c"]returnsnull.Step 2: Apply Elvis operator
?: 0returns 0 because the left side isnull.Final Answer:
0 -> Option DQuick Check:
map[missingKey] ?: default = default [OK]
- Expecting null to print instead of default
- Thinking exception is thrown
- Confusing existing key values
Identify the error in this Kotlin code snippet and choose the corrected version:
val list = listOf(10, 20, 30) val value = list[5] ?: -1 println(value)
Solution
Step 1: Understand list access with
Using[]list[5]throws anIndexOutOfBoundsExceptionbecause index 5 is out of range.Step 2: Use safe access method
list.getOrNull(5)returnsnullif index is invalid, so combined with?: -1it safely returns-1.Final Answer:
val value = list.getOrNull(5) ?: -1 -> Option CQuick Check:
Use getOrNull + ?: to avoid exceptions [OK]
- Using [] which throws exception if index invalid
- Using get(5) which throws exception
- Confusing getOrElse syntax
You have a map val scores = mapOf("Alice" to 90, "Bob" to 85) and a list val bonuses = listOf(5, 10). You want to safely get Bob's score and the bonus at index 2, returning 0 if missing, then sum them. Which code correctly does this?
Solution
Step 1: Access map value safely
scores["Bob"] ?: 0safely gets Bob's score or 0 if missing.Step 2: Access list element safely
bonuses.getOrNull(2) ?: 0safely gets bonus at index 2 or 0 if out of bounds.Step 3: Sum the two values
Adding these two safe values gives the total without errors.Final Answer:
val total = (scores["Bob"] ?: 0) + (bonuses.getOrNull(2) ?: 0) -> Option AQuick Check:
Safe map + safe list access with ?: for default [OK]
- Using bonuses[2] which throws exception if index invalid
- Using getOrNull on map which is invalid
- Not providing default fallback
Ready to prove it?
Pass the test and this pattern moves unknown
