6) Para los amantes del NullPointerException con el operador !!, un verdadero NPE directo:
1) Operador de aserción !! + función .toIntOrNull() = un verdadero NullPointerException:
package ingresando.datos
fun main(arg: Array) {
var num: Int
print("Ingrese un numero: ")
num = readLine()!!.toIntOrNull()!!
println(num)
}
2) Operador ?. + operador !! + función .toIntOrNull() = de null a NullPointerException a un solo !!:
package ingresando.datos
fun main(arg: Array) {
var num: Int?
print("Ingrese un numero: ")
num = readLine()?.toIntOrNull()!!
println(num)
}
4) Con el operador !!, complaciendo a los amantes del NullPointerException:
1) Sin el operador as + expresión try {…} catch {…} + throw = un placer inducido para los NPE’s Lovers:
package ingresando.datos
fun main(arg: Array) {
var num: Int
print("Ingrese un numero: ")
num = try {
readLine()!!.toInt()
} catch (_: NumberFormatException) {
throw NullPointerException("NullPointerException: " +
"no se puede conververtir una referencia null en tipo Int")
}
println(num)
}
2) Con el operador as + expresión try {…} catch {…} + null explícito = un placer aún más natural NPE’s Lovers:
package ingresando.datos
fun main(arg: Array) {
var num: Int?
print("Ingrese un numero: ")
num = try {
readLine()!!.toInt()
} catch (_: NumberFormatException) {
null
}
num!!
println(num)
}
2. Manejando correctamente el NumberFormatException, lectura con el operador ?. de forma segura:
1) Con el operador as + expresión try {…} catch() {…} = sin null de forma segura:
package ingresando.datos
fun main(arg: Array) {
var num: Int
print("Ingrese un numero: ")
num = try {
readLine()?.toInt() as Int
} catch (_: NumberFormatException) {
0
}
println(num)
}
la variable num con una sentencia if().
if (num != 0) {
println("El numero ingresado es: $num")
} else {
println("Error: numero no valido!")
}
2) Sin el operador as + expresión try {…} catch() {…} = un null de forma segura:
package ingresando.datos
fun main(arg: Array) {
var num: Int?
print("Ingrese un numero: ")
num = try {
readLine()?.toInt()
} catch (_: NumberFormatException) {
null
}
}
manejo con la sentencia if() o when() de la siguiente forma:
if(num != null) {
println("El numero ingresado es: $num")
} else {
println("Se ha asignado -$num- a la variable")
}
5) Lectura realmente segura con el operador ?., produciendo un verdadero null en lugar de un NFE:
1) Función .toIntOrNull() + operador ?. = forma reducida, concisa y segura:
package ingresando.datos
fun main(arg: Array) {
var num: Int?
print("Ingrese un numero: ")
num = readLine()?.toIntOrNull()
println(num)
}
Manejando la excepción TypeCastException con la expresión try {…} catch() {..}:
package ingresando.datos
fun main(arg: Array) {
var num: Int
print("Ingrese un numero: ")
num = try {
readLine()?.toIntOrNull() as Int
} catch (_: TypeCastException) {
0
}
println(num)
}
2) Con el operador as + operador ?. = una excepción TypeCastException que se escapa:
package ingresando.datos
fun main(arg: Array) {
var num: Int
print("Ingrese un numero: ")
num = readLine()?.toIntOrNull() as Int
println(num)
}
3) Para los amantes del NullPointerException con el operador !!, casi, casi:
1) Con o sin operador as, expectativa vs realidad:
package ingresando.datos
fun main(arg: Array) {
var num: Int
print("Ingrese un numero: ")
num = readLine()!!.toInt()
println(num)
}
1)Lectura de datos de formas«casi» seguras con el operador ?., levantando una excepción NumberFormatException:
1) Con el operador as:
package ingresando.datos
fun main(arg: Array) {
var num: Int
print("Ingrese un numero: ")
num = readLine()?.toInt() as Int
println(num)
}
2) sin el operador as
package ingresando.datos
fun main(arg: Array) {
var num: Int?
print("Ingrese un numero: ")
num = readLine()?.toInt()
println(num)
}