Use ? and ?: to handle missing values.

null A nullable type can hold either a value or `null`.

Nullable Types

nickname
NullableTypes.kt
Replay: real traced execution (multi-file project)
fun main() {
    val nickname: String? = "kai"
    val display = nickname ?: "guest"
    val length = display.length

    println("display=$display")
    println("length=$length")
}
fun main() {
    val nickname: String? = null
    val display = nickname ?: "guest"
    val length = display.length

    println("display=$display")
    println("length=$length")
}
fun main() {
    val nickname: String? = "lee"
    val display = nickname ?: "guest"
    val length = display.length

    println("display=$display")
    println("length=$length")
}
  1. nickname ← kai, display ← kai, length ← 3

    1fun main() {2    val nickname→ kai: String? = "kai" //@nickname=null, "lee"3    val display→ kai = nicknamekai ?: "guest"4    val length→ 3 = display.length356    println("display=$displaykai")7    println("length=$length3")8}
    outputdisplay=kai
    length=3
  1. nickname ← null, display ← guest, length ← 5

    1fun main() {2    val nickname→ null: String? = null3    val display→ guest = nicknamenull ?: "guest"4    val length→ 5 = display.length556    println("display=$displayguest")7    println("length=$length5")8}
    outputdisplay=guest
    length=5
  1. nickname ← lee, display ← lee, length ← 3

    1fun main() {2    val nickname→ lee: String? = "lee"3    val display→ lee = nicknamelee ?: "guest"4    val length→ 3 = display.length356    println("display=$displaylee")7    println("length=$length3")8}
    outputdisplay=lee
    length=3

Follow the Fallback

  1. nickname starts as kai.
  2. display = nickname ?: "guest" uses kai because it is not null.
  3. display.length is 3.
  4. The program prints display=kai and length=3. | nickname | display | length | | --- | --- | --- | | null | guest | 5 | | kai | kai | 3 | | lee | lee | 3 |

Exercise: NullableTypes.kt

Reproduce display=kai and length=3, then use the pinned nickname values null and lee to predict each display and length.