Clases Enum en Kotlin

En programación, a veces surge la necesidad de que un tipo tenga solo ciertos valores. Para lograr esto, se introdujo el concepto de enumeración. La enumeración es una lista nombrada de constantes.
En Kotlin, como muchos otros lenguajes de programación, una enumeración tiene su propio tipo especializado, lo que indica que algo tiene varios valores posibles. A diferencia de las enumeraciones de Java, las enumeraciones de Kotlin son clases .

Algunos puntos importantes sobre las clases de enumeración en kotlin :

  • Las constantes de enumeración no son solo meras colecciones de constantes, estas tienen propiedades, métodos, etc.
  • Cada una de las constantes de enumeración actúa como instancias separadas de la clase y separadas por comas.
  • Las enumeraciones aumentan la legibilidad de su código al asignar nombres predefinidos a las constantes.
  • No se puede crear una instancia de la clase enum usando constructores.

Las enumeraciones se definen mediante el uso de la palabra clave enum delante de la clase de esta manera: –

enum class DAYS{
  SUNDAY,
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY
}

Inicializando enumeraciones –

En Kotlin, las enumeraciones también pueden tener un constructor como las enumeraciones de Java. Dado que las constantes enum son instancias de una clase Enum, las constantes se pueden inicializar pasando valores específicos al constructor principal .

Aquí hay un ejemplo para especificar colores a las tarjetas:

enum class Cards(val color: String) {
    Diamond("black"),
    Heart("red"),
}

Podemos acceder fácilmente al color de una tarjeta usando:

val color = Cards.Diamond.color

Enums propiedades y métodos –

Al igual que en Java y en otros lenguajes de programación, las clases de enumeración de Kotlin tienen algunas propiedades y funciones incorporadas que el programador puede utilizar. He aquí un vistazo a las principales propiedades y métodos.

Propiedades –

  1. ordinal: esta propiedad almacena el valor ordinal de la constante, que suele ser un índice de base cero.
  2. nombre: Esta propiedad almacena el nombre de la constante.

Métodos –

  1. valores : este método devuelve una lista de todas las constantes definidas dentro de la clase de enumeración.
  2. valueOf : este método devuelve la constante de enumeración definida en enumeración, que coincide con la string de entrada. Si la constante no está presente en la enumeración, se lanza una IllegalArgumentException.

Ejemplo para demostrar la clase enum en Kotlin –

enum class DAYS {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
}
fun main()
{
    // A simple demonstration of properties and methods
    for (day in DAYS.values()) {
        println("${day.ordinal} = ${day.name}")
    }
    println("${DAYS.valueOf(" WEDNESDAY ")}")
}

Producción:

0 = SUNDAY
1 = MONDAY
2 = TUESDAY
3 = WEDNESDAY
4 = THURSDAY
5 = FRIDAY
6 = SATURDAY
WEDNESDAY

Propiedades y funciones de la clase Enum –

Dado que la clase enum en Kotlin, define un nuevo tipo. Este tipo de clase puede tener sus propias propiedades y funciones. A las propiedades se les puede dar un valor predeterminado , sin embargo, si no se proporciona, entonces cada constante debe definir su propio valor para la propiedad. En el caso de las funciones, generalmente se definen dentro de los objetos complementarios para que no dependan de instancias específicas de la clase. Sin embargo, también se pueden definir sin objetos complementarios.

Ejemplo para demostrar propiedades y funciones en Kotlin

// A property with default value provided
enum class DAYS(val isWeekend: Boolean = false){
    SUNDAY(true),
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    // Default value overridden
    SATURDAY(true);
   
    companion object{
        fun today(obj: DAYS): Boolean {
            return obj.name.compareTo("SATURDAY") == 0 || obj.name.compareTo("SUNDAY") == 0
        }
    }
}
   
fun main(){
    // A simple demonstration of properties and methods
    for(day in DAYS.values()) {
        println("${day.ordinal} = ${day.name} and is weekend ${day.isWeekend}")
    }
    val today = DAYS.MONDAY;
    println("Is today a weekend ${DAYS.today(today)}")
}

Producción:

0 = SUNDAY and is weekend true
1 = MONDAY and is weekend false
2 = TUESDAY and is weekend false
3 = WEDNESDAY and is weekend false
4 = THURSDAY and is weekend false
5 = FRIDAY and is weekend false
6 = SATURDAY and is weekend true
Is today a weekend false

Enumeraciones como clases anónimas –

Las constantes de enumeración también se comportan como clases anónimas al implementar sus propias funciones junto con la anulación de las funciones abstractas de la clase. Lo más importante es que cada constante de enumeración debe anularse.

// defining enum class
enum class Seasons(var weather: String) {
    Summer("hot"){
        // compile time error if not override the function foo()
        override fun foo() {              
            println("Hot days of a year")
        }
    },
    Winter("cold"){
        override fun foo() {
            println("Cold days of a year")
        }
    },
    Rainy("moderate"){
        override fun foo() {
            println("Rainy days of a year")
        }
    };
    abstract fun foo()
}
// main function
fun main(args: Array<String>) {
    // calling foo() function override be Summer constant
    Seasons.Summer.foo() 
}

Producción:

Hot days of a year

Uso de expresión when con clase enum –

Una gran ventaja de las clases enum en Kotlin entra en juego cuando se combinan con la expresión when . La ventaja es que las clases de enumeración restringen el valor que puede tomar un tipo, por lo que cuando se usa con la expresión when y se proporciona la definición de todas las constantes, la necesidad de la cláusula else se elimina por completo . De hecho, hacerlo generará una advertencia del compilador.

enum class DAYS{
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY;
}
   
fun main(){
    when(DAYS.SUNDAY){
        DAYS.SUNDAY -> println("Today is Sunday")
        DAYS.MONDAY -> println("Today is Monday")
        DAYS.TUESDAY -> println("Today is Tuesday")
        DAYS.WEDNESDAY -> println("Today is Wednesday")
        DAYS.THURSDAY -> println("Today is Thursday")
        DAYS.FRIDAY -> println("Today is Friday")
        DAYS.SATURDAY -> println("Today is Saturday")
        // Adding an else clause will generate a warning
    }
}

Producción:

Today is Sunday

Publicación traducida automáticamente

Artículo escrito por CharchitKapoor 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 *