6 - Estructura condicional if como expresión

En Kotlin existe la posibilidad de que la estructura condicional if retorne un valor, característica no común a otros lenguajes de programación.

Veremos con una serie de ejemplos la sintaxis para utilizar el if como expresión.

Problema 1

Cargar dos valores enteros, almacenar el mayor de los mismos en otra variable y mostrarlo.

Proyecto15 - Principal.kt

fun main(parametro: Array<String>) {
    print("Ingrese primer valor:")
    val valor1 = readln().toInt()
    print("Ingrese segundo valor:")
    val valor2 = readln().toInt()
    val mayor = if (valor1 > valor2) valor1 else valor2
    println("El mayor entre $valor1 y $valor2 es $mayor")
}

Como podemos ver asignamos a una variable llamada mayor el valor que devuelve la expresión if. Si la condición del if es verdadera retorna el contenido de la variable valor1 y sino retorna valor2:

    val mayor = if (valor1 > valor2) valor1 else valor2

El compilador de Kotlin infiere que la variable mayor debe ser de tipo Int ya que tanto valor1 como valor2 son Int.

Las llaves no las disponemos debido a que hay una solo operación tanto por el verdadero como por el falso.

Lo más común es que se utilice un if como expresión donde se retorna un valor necesitando una sola actividad por el verdadero y el falso, pero el lenguaje nos permite disponer más de una instrucción por cada rama del if.

Problema 2

Ingresar por teclado un valor entero. Almacenar en otra variable el cuadrado de dicho número si el valor ingresado es par, en caso que sea impar guardar el cubo.
Mostrar además un mensaje que indique si se calcula el cuadrado o el cubo.

Proyecto16 - Principal.kt

fun main(parametro: Array) {
    print("Ingrese un valor entero:")
    val valor = readln().toInt()
    val resultado = if (valor % 2 == 0) {
        print("Cuadrado:")
        valor * valor
    } else {
        print("Cubo:")
        valor * valor * valor
    }
    print(resultado)
}

En este problema hacemos más de una actividad por la rama del verdadero y el falso del if, por eso van encerradas entre llaves.

Es importante tener en cuenta que la última línea de cada bloque del if es la que se retorna y se almacena en la variable resultado:

    val resultado = if (valor % 2 == 0) {
        print("Cuadrado:")
        valor * valor
    } else {
        print("Cubo:")
        valor * valor * valor
    }

Utilizamos el operador % (resto de una división) para identificar si una variable es par o impar. El resto de dividir un valor por el número 2 es cero (ej. 10 % 2 es cero)

Tener en cuenta que no es lo mismo hacer:

    val resultado = if (valor % 2 == 0) {
        valor * valor
        print("Cuadrado:")
    } else {

Problema propuesto

  • Cargar un valor entero por teclado comprendido entre 1 y 99. Almacenar en otra variable la cantidad de dígitos que tiene el valor ingresado por teclado.
    Mostrar la cantidad de dígitos del número ingresado por teclado.
Solución
Proyecto17

fun main(parametro: Array<String>) {
    print("Ingrese un valor entero comprendido entre 1 y 99:")
    val valor=readln().toInt()
    var cantidad = if (valor <10) 1 else 2
    println("El número $valor tiene $cantidad dígito/s")
}