ある関数の戻り値が true だったら、その引数となった値が non-null として smart cast される例。
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
fun f(s: String?) {
if (isValidString(s)) {
// isValidString(s) implies s is not null.
val validString: String = s // <- smart casted here!
}
}
// checks if s starts with "hoge:".
@OptIn(ExperimentalContracts::class)
fun isValidString(s: String?): Boolean {
contract {
returns(true) implies (s != null)
}
return s?.startsWith("hoge:") == true
}