Guard a nullable input before treating it as required.

require `requireNotNull` is useful after code has decided that a missing value is invalid.

Require Not Null

input
RequireNotNull.kt
Replay: real traced execution (multi-file project)
fun describe(input: String?): String {
    if (input == null) {
        return "missing"
    }

    val required = requireNotNull(input)
    return "required:${required.length}"
}

fun main() {
    val input: String? = "token"
    val result = describe(input)

    println("input=${input ?: "none"}")
    println("result=$result")
}
fun describe(input: String?): String {
    if (input == null) {
        return "missing"
    }

    val required = requireNotNull(input)
    return "required:${required.length}"
}

fun main() {
    val input: String? = null
    val result = describe(input)

    println("input=${input ?: "none"}")
    println("result=$result")
}
fun describe(input: String?): String {
    if (input == null) {
        return "missing"
    }

    val required = requireNotNull(input)
    return "required:${required.length}"
}

fun main() {
    val input: String? = "value"
    val result = describe(input)

    println("input=${input ?: "none"}")
    println("result=$result")
}
  1. input ← token

    10fun main() {11    val input→ token: String? = "token" //@input=null, "value"12    val result = describe(inputtoken)
  2. required ← token

    1fun describe(inputtoken: String?): String {2    if (input == null) {3        return "missing"4    }56    val required→ token = requireNotNull(inputtoken)7    return "required:${required.length5}"8}
  3. result ← required:5

    11    val input: String? = "token" //@input=null, "value"12    val result→ required:5 = describe(inputtoken)1314    println("input=${inputtoken ?: "none"}")15    println("result=$resultrequired:5")16}
    outputinput=token
    result=required:5
  1. input ← null

    10fun main() {11    val input→ null: String? = null12    val result = describe(inputnull)
  2. fun describe(input: String?): String

    1fun describe(inputnull: String?): String {2    if (input == null) {
  3. if (input == null)

    1fun describe(input: String?): String {2    if (inputnull == null) {3        return "missing"4    }
  4. result ← missing

    11    val input: String? = null12    val result→ missing = describe(inputnull)1314    println("input=${inputnull ?: "none"}")15    println("result=$resultmissing")16}
    outputinput=none
    result=missing
  1. input ← value

    10fun main() {11    val input→ value: String? = "value"12    val result = describe(inputvalue)
  2. required ← value

    1fun describe(inputvalue: String?): String {2    if (input == null) {3        return "missing"4    }56    val required→ value = requireNotNull(inputvalue)7    return "required:${required.length5}"8}
  3. result ← required:5

    11    val input: String? = "value"12    val result→ required:5 = describe(inputvalue)1314    println("input=${inputvalue ?: "none"}")15    println("result=$resultrequired:5")16}
    outputinput=value
    result=required:5