We have just seen how nullable types are declared. So how do we use a nullable type when we have one? The first option is to use smart casts. Briefly introduced in Chapter 2, Kotlin Basics, smart casts are a Kotlin feature whereby the compiler tracks conditions inside an if expression. As long as we perform a check that the variable is not null, then the compiler will allow us to access the variable as if it was declared as a non-nullable type:
fun getName(): String? = ... val name = getName() if (name != null) { println(name.length) }
Note that we are able to invoke the length function on the name value inside the if expression. This is because the compiler has verified that we cannot be inside that block unless the name references a non-null value.
A null smart cast only works when the variable is either a member val without a backing field...