capturar datos kotlin

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<String>) {
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<String>) {

var num: Int?

print("Ingrese un numero: ")

num = readLine()?.toInt()

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<String>) {

var num: Int

print("Ingrese un numero: ")

num = readLine()!!.toInt()

println(num)

}

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<String>) {

var num: Int?

print("Ingrese un numero: ")

num = readLine()?.toIntOrNull()

println(num)

}

2) Con el operador as + operador ?. = una excepción TypeCastException que se escapa:

package ingresando.datos

fun main(arg: Array<String>) {

var num: Int

print("Ingrese un numero: ")

num = readLine()?.toIntOrNull() as Int

println(num)

}

Manejando la excepción TypeCastException con la expresión try {…} catch() {..}:

package ingresando.datos

fun main(arg: Array<String>) {

var num: Int

print("Ingrese un numero: ")

num = try {

readLine()?.toIntOrNull() as Int

} catch (_: TypeCastException) {

0

}

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<String>) {

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<String>) {

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")

}

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<String>) {

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<String>) {

var num: Int?

print("Ingrese un numero: ")

num = try {

readLine()!!.toInt()

} catch (_: NumberFormatException) {

null

}

num!!

println(num)

}

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<String>) {

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<String>) {

var num: Int?

print("Ingrese un numero: ")

num = readLine()?.toIntOrNull()!!

println(num)

}