Kotlin nullsafety

3 min read
Nullable types
El error del billon de dolares
La idea es generar los NPE en tiempo
de compilación y no en tiempo de ejecución
fun main(){
val s1: String = "Nunca soy null"
println(s1)
}
- Y si soy null?
fun main(){
val s1: String = null
println(s1)
}
- Para esto tenemos los tipos Nulables
fun main(){
val s2: String? = "Puedo ser null y también puedo ser String"
println(s2)
}
- Y que pasa si soy null
fun main(){
val s2: String? = null
println(s2)
}
Checking for null in conditions
- Chequear null con una condición
fun main(){
val s: String? = null
val length = if (s != null) s.length else null
println(length)
}
Safe Calls
- La segunda opción es usar el Safe Call operator ?.
fun main(){
val s: String? = null
val length = s?.length
println(length)
}
- Asignando un valor
fun main(){
val s: String? = null
val length = s?.length ?: 0
println(length)
}
- ¿ Que estamos imprimiento aquí ?
fun main(){
val a: Int? = null
val b: Int? = 1
val c: Int = 2
val s1 = (a ?: 0) + c
val s2 = (b ?: 0) + c
print("$s1$s2")
}
- ¿ Qué va a pasar ?
class Name{
val value :String = ""
}
fun isFoo1(n: Name) = n.value == "foo"
//fun isFoo2(n: Name?) = n.value == "foo"
//fun isFoo3(n: Name?) = n != null && n.value == "foo"
//fun isFoo4(n: Name?) = n?.value == "foo"
fun main(args: Array<String>) {
isFoo1(null)
//isFoo2(null)
//isFoo3(null)
//isFoo4(null)
}
- ¿ Qué va a pasar ?
class Name{
val value :String = ""
}
//fun isFoo1(n: Name) = n.value == "foo"
fun isFoo2(n: Name?) = n.value == "foo"
//fun isFoo3(n: Name?) = n != null && n.value == "foo"
//fun isFoo4(n: Name?) = n?.value == "foo"
fun main(args: Array<String>) {
//isFoo1(null)
isFoo2(null)
//isFoo3(null)
//isFoo4(null)
}
- ¿ Qué va a pasar ?
class Name{
val value :String = "foo"
}
//fun isFoo1(n: Name) = n.value == "foo"
//fun isFoo2(n: Name?) = n.value == "foo"
fun isFoo3(n: Name?) = n != null && n.value == "foo"
//fun isFoo4(n: Name?) = n?.value == "foo"
fun main(args: Array<String>) {
//isFoo1(null)
//isFoo2(null)
println(isFoo3(Name()))
//isFoo4(null)
}
- ¿ Qué va a pasar ?
class Name{
val value :String = "foo"
}
//fun isFoo1(n: Name) = n.value == "foo"
//fun isFoo2(n: Name?) = n.value == "foo"
//fun isFoo3(n: Name?) = n != null && n.value == "foo"
fun isFoo4(n: Name?) = n?.value == "foo"
fun main(args: Array<String>) {
//isFoo1(null)
//isFoo2(null)
//println(isFoo3(Name()))
println(isFoo4(null))
}
- ¿ Que se va a imprimir ?
fun main(){
val x: Int? = 1
val y: Int = 2
val sum = x ?: 0 + y
println(sum)
}
## Referencias
* [Kotlin for java developers](https://www.coursera.org/learn/kotlin-for-java-developers)
* [https://kotlinlang.org/](https://kotlinlang.org/)
6
Subscribe to my newsletter
Read articles from Carlos Hinostroza directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
