Kotlin | Comprobación de tipo y Smart Casting

Comprobación de tipo –

En Kotlin, podemos verificar el tipo de cierta variable usando el operador is en tiempo de ejecución. Es una forma de verificar el tipo de una variable en tiempo de ejecución para separar el flujo de diferentes objetos. Programa Kotlin de verificación de tipo usando bloques if-else- 

Kotlin

fun main(args: Array<String>) {
    var name = "Praveen"
    var age = 24
    var salary = 5000.55
    val employeeDetails: List<Any> = listOf(name,age,salary)
 
    for(attribute in employeeDetails) {
        if (attribute is String) {
            println("Name: $attribute")
        } else if (attribute is Int) {
            println("Age: $attribute")
        } else if (attribute is Double) {
            println("Salary: $attribute")
        } else {
            println("Not an attribute")
        }
    }
}

Producción:

Name: Praveen
Age: 24
Salary: 5000.55

Explicación: Aquí, inicializamos tres variables nombre , edad y salario y luego pasamos a la lista. Luego, recorra la lista con la ayuda del bucle for , en cada bloque if-else verificamos el tipo del elemento usando el operador is y ejecutamos la instrucción print() respectiva . Uso de la expresión when: podemos reemplazar fácilmente los bloques if-else con la expresión when . Ya hemos aprendido acerca de la expresión when en los artículos de flujo de control. Para más detalles, podemos referirnos a la expresión when en Kotlin. Programa Kotlin de verificación de tipos usando when – 

Kotlin

fun main(args: Array<String>) {
    var name = "Praveen"
    var age = 24
    var salary = 5000.55
    var emp_id = 12345f
    val employeeDetails: List<Any> = listOf(name, age, salary, emp_id)
 
    for (attribute in employeeDetails) {
        when (attribute) {
            is String -> println("Name: $attribute ")
            is Int -> println("Age: $attribute")
            is Double -> println("Salary: $attribute")
            else -> println("Not an attribute")
        }
    }
}

Producción:

Name: Praveen 
Age: 24
Salary: 5000.55
Not an attribute

Casting inteligente –

En Java u otros lenguajes de programación, existe un requisito de conversión de tipo explícito en la variable antes de acceder a las propiedades de esa variable, pero Kotlin realiza una conversión inteligente . El compilador de Kotlin convierte automáticamente la variable en una referencia de clase particular una vez que se pasa a través de cualquier operador condicional. Tomemos un ejemplo de Java. En primer lugar, verificamos el tipo de variable usando el operador instanceOf y luego lo convertimos en el tipo de destino de esta manera: 

Java

Object ob = "GeeksforGeeks";
 
if(ob instanceof String) {
    // Explicit type casting
    String str = (String) ob;
 
    System.out.println("length of String " + str.length());
 }

En Kotlin, la conversión inteligente de tipos es una de las características más interesantes disponibles. Usamos el operador is o !is para verificar el tipo de variable, y el compilador convierte automáticamente la variable al tipo de destino de esta manera: 

Kotlin

fun main(args: Array<String>) {
    val str1: String? = "GeeksforGeeks"
    var str2: String? = null   // prints String is null
    if(str1 is String) {
        
        // No Explicit type Casting needed.
        println("length of String ${str1.length}")
    }
    else {
        println("String is null")
    }
}

Producción:

length of String 13

Uso del operador !is De manera similar, usando el operador !is podemos verificar la variable. 

Kotlin

fun main(args: Array<String>) {
    val str1: String? = "GeeksforGeeks"
    var str2: String? = null  // prints String is null
    if(str1 !is String) {
        println("String is null")
    }
    else {
        println("length of String ${str1.length}")
    }
}

Producción:

length of String 13

Nota: Smart Cast no funciona cuando el compilador no puede garantizar que la variable no pueda cambiar entre la verificación y el uso. Los Smartcasts son aplicables de acuerdo con las siguientes reglas:

  • Las variables locales val siempre funcionan, excepto las propiedades locales delegadas.
  • val properties solo funciona si la propiedad es privada o interna o si la verificación se realiza en el mismo módulo donde se declara la propiedad. Las conversiones inteligentes no se aplican a propiedades abiertas o propiedades que tienen captadores personalizados.
  • var variables locales funciona solo si la variable no se modifica entre la verificación y el uso, no se captura en una lambda que la modifica y no es una propiedad delegada local.
  • var propiedades: nunca funciona porque la variable se puede modificar en cualquier momento.

Publicación traducida automáticamente

Artículo escrito por Praveenruhil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *