Aprende a Programar Apps para iPhone con  Swift, SwiftUI y UIKit - lafactoriaapple

Instrucción else if

Utilizamos else if en sustitución del else que hemos visto hasta ahora, con la ventaja de que ahora podremos agregar una nueva condición. Podremos encadenar varias instrucciones else if, pero sólo una podrá será verdadera. En caso de que escribamos más de una else if verdadera, sólo se ejecutará la que se encuentre primero.

La mejor forma de comprenderlo será con un ejemplo. Supongamos que vamos a pagar una prima a los empleados que ganan menos de 2000€. Y esa prima irá en función de los años de antiguedad en la empresa.

var sueldo : Int = 1500

var antiguedad : Int = 4

var primaBeneficios : Int = 0 // La inicializamos con el valor 0

var sueldoNeto : Int = 0 // La inicializamos con el valor 0

if sueldo > 2000{
    print("No tienes derecho a la prima de beneficios")
}else if antiguedad > 3{
    primaBeneficios = 200
}else if antiguedad > 5{
    primaBeneficios = 300
}else if antiguedad > 7{
    primaBeneficios = 400
}

sueldoNeto = sueldo + primaBeneficios

print("Este mes, además de los \(sueldo)€ de sueldo, recibirás una prima de beneficios de \(primaBeneficios)€. Lo que supone un Sueldo Neto de \(sueldoNeto)€")

Como no se cumple la condición sueldo > 2000, entonces no puede ejecutarse el primer bloque de código y se evaluarán los distintos bloques else if, de los cuales sólo uno puede ser verdadero.

¿Qué pasaría si no se cumpliera ninguna de las condiciones de los bloques else if? Podríamos agregar un bloque else. Estaríamos en ese caso si la antiguedad fuera inferior a 3 años.

var sueldo : Int = 1500

var antiguedad : Int = 2

var primaBeneficios : Int = 0 // La inicializamos con el valor 0

var sueldoNeto : Int = 0 // La inicializamos con el valor 0

if sueldo > 2000{
    print("No tienes derecho a la prima de beneficios")
}else if antiguedad > 3{
    primaBeneficios = 200
}else if antiguedad > 5{
    primaBeneficios = 300
}else if antiguedad > 7{
    primaBeneficios = 400
}else{
    print("Este mes, como llevas  menos de 3 años en la empresa, no tendrás prima de beneficios. Sólo cobrarás tu Sueldo de \(sueldo)€")
}

sueldoNeto = sueldo + primaBeneficios

print("Este mes, además de los \(sueldo)€ de sueldo, recibirás una prima de beneficios de \(primaBeneficios)€. Lo que supone un Sueldo Neto de \(sueldoNeto)€")

Fíjate que se sigue mostrando por consola el mensaje que debería aparecer sólo cuando se da la circunstancia de que el empleado tiene prima de beneficios. ¿Cómo podemos arreglar esta situación? Por ejemplo, controlando la aparición de ese mensaje mediante una variable booleana que tomará el valor false sólo cuando el empleado NO obtenga paga de beneficios.

var sueldo : Int = 1500

var antiguedad : Int = 2

var primaBeneficios : Int = 0 // La inicializamos con el valor 0

var sueldoNeto : Int = 0 // La inicializamos con el valor 0

var tienePrimaBeneficios : Bool = true

if sueldo > 2000{
    print("No tienes derecho a la prima de beneficios")
}else if antiguedad > 3{
    primaBeneficios = 200
}else if antiguedad > 5{
    primaBeneficios = 300
}else if antiguedad > 7{
    primaBeneficios = 400
}else{
    tienePrimaBeneficios = false
    print("Este mes, como llevas  menos de 3 años en la empresa, no tendrás prima de beneficios. Sólo cobrarás tu Sueldo de \(sueldo)€")
}

if tienePrimaBeneficios {
    sueldoNeto = sueldo + primaBeneficios
    print("Este mes, además de los \(sueldo)€ de sueldo, recibirás una prima de beneficios de \(primaBeneficios)€. Lo que supone un Sueldo Neto de \(sueldoNeto)€")
}

Más en esta Sección

  • Instrucciones if anidadas

  • Operador Ternario en Swift

  • Operadores Lógicos

  • Operadores de Comparación

  • Instrucciones if/else en Swift