Ejemplo de función de extensión aplicado a fechas

Ejemplo de función de extensión aplicado a fechas

El siguiente programa ilustra el uso de una función de extensión utilizada para diseñar un método aplicable a la clase Calendar para que nos indique si un objeto de la clase (una fecha) sobre el que se aplica cae en fin de semana.

Además se repasan otros conceptos vistos en entradas anteriores, como el bucle do...while y la lectura de datos en consola. Por otra parte, también se utilizan cuestiones que se tratarán más adelante, como la importación de paquetes y la clase base abstracta Calendar para manejar fechas.

/*
 * Kotlin Doc
 * Programa para verificar si una fecha cae en fin de semana
*/

import java.util.Locale
import java.util.Calendar
import java.util.Calendar.DAY_OF_WEEK
import java.util.Calendar.MONTH
import java.util.Calendar.LONG

// función que extiende la clase Calendar
fun Calendar.esFinDeSemana(): Boolean {
    val diaSemana = this.get(Calendar.DAY_OF_WEEK)
    return diaSemana == Calendar.SUNDAY || diaSemana == Calendar.SATURDAY
}

fun main() {
    // Entrada de datos
    var dia: Int?
    do {
        print("Introduce día (1-31): ")
        dia = readLine()?.toIntOrNull()
    } while (dia == null || dia !in 1..31)

    var mes: Int?
    do {
        print("Introduce mes (1-12): ")
        mes = readLine()?.toIntOrNull()
    } while (mes == null || mes !in 1..12)

    var ano: Int?
    do {
        print("Introduce año (1970-2040): ")
        ano = readLine()?.toIntOrNull()
    } while (ano == null || ano !in 1970..2040)

    // Creamos fecha con los datos introducidos
    val fecha = Calendar.getInstance()
    fecha.set(ano, mes - 1, dia)
    val mesNombre = fecha.getDisplayName(MONTH, LONG, Locale.getDefault())
    val diaSemanaNombre = fecha.getDisplayName(DAY_OF_WEEK, LONG, Locale.getDefault())
    print("El día $dia de $mesNombre de $ano es $diaSemanaNombre. ")

    // llamamos a la función de extensión
    if (fecha.esFinDeSemana()) {
        println("¡Fin de semana!")
    } else {
        println("Ya falta menos para el sábado...")
    }
}
Introduce día (1-31): 10
Introduce mes (1-12): 5
Introduce año (1970-2040): 2019
El día 10 de mayo de 2019 es viernes. Ya falta menos para el sábado...

Comentarios

Entradas populares

Recursos gratis para aprender Kotlin

I/O: entrada y salida de datos en consola

Lectura y escritura de archivos