Разнообразие enum в Kotlin

от автора

Kotlin, являясь мощным современным языком программирования, дает возможность разработчикам создавать эффективный и читаемый код. Одна из таких фич это перечисления — Enum classes — тип данных, который позволяет определить множество именованных констант. В этой статье рассмотрим различные примеры использования enum, которые помогут эффективнее применять этот инструмент в своих проектах.

Enum Classes

Enum классы в Kotlin это удобный способ представить множество констант. Они позволяют определить тип с конечным сетом значений.

Например, определим enum класс для представления дней недели:

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

Теперь мы можем обратиться к enum из другого участка кода:

fun getWeekendDays(): List<DayOfWeek> {    return listOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY) }

Enum Properties

Enum классы в Kotlin также могут обладать полями или свойствами. Это позволяет добавить дополнительную информацию о каждой константе в перечислении. 

В нашем примере добавим свойство к DayOfWeek, которое определяет номер дня недели:

enum class DayOfWeek(val number: Int) {    MONDAY(1),    TUESDAY(2),    WEDNESDAY(3),    THURSDAY(4),    FRIDAY(5),    SATURDAY(6),    SUNDAY(7) }

Теперь мы можем обратиться к свойству enum:

fun getDayNumber(day: DayOfWeek): Int {    return day.number }

Enum Methods

Еще Enum классы в Kotlin могут иметь методы. С ними можно добавить дополнительную функциональность каждой константе enum

В примере с днями недели добавим метод который возвращает true если это выходной false если рабочий день.

enum class DayOfWeek(val number: Int) {    MONDAY(1),    TUESDAY(2),    WEDNESDAY(3),    THURSDAY(4),    FRIDAY(5),    SATURDAY(6),    SUNDAY(7);     fun isWeekend(): Boolean {    return this == SATURDAY || this == SUNDAY    } }

Теперь мы можем вызывать метод enum:

fun printDayType(day: DayOfWeek) {    if (day.isWeekend()) {    println("$day is a weekend day.")    } else {    println("$day is a weekday.")    } }

Enum Constructors

Enum классы в Kotlin могут иметь конструкторы. Конструкторы предоставляют дополнительные данные для каждой константы в момент инициализации.

В нашем примере определим конструктор, который добавляет displayName для каждого дня недели

enum class DayOfWeek(val number: Int, val displayName: String) {    MONDAY(1, "Monday"),    TUESDAY(2, "Tuesday"),    WEDNESDAY(3, "Wednesday"),    THURSDAY(4, "Thursday"),    FRIDAY(5, "Friday"),    SATURDAY(6, "Saturday"),    SUNDAY(7, "Sunday");     override fun toString(): String {    return displayName    } }

Теперь мы можем использовать displayName для печати константы.

 fun printDayName(day: DayOfWeek) {    println("The day of the week is ${day.displayName}") }

Enum Extensions

Как и для обычного класса, для Enum классов в Kotlin возможно написать расширение. Таким образом, мы получаем экстеншен функцию которая не определена в исходном перечислении.

В нашем примере расширим enum методом, который вернет следующий день недели

fun DayOfWeek.nextDay() = DayOfWeek.values()[(ordinal + 1) % 7]

Теперь мы можем вызывать расширение enum:

fun printNextDay(day: DayOfWeek) {    println("The next day is ${day.nextDay()}") }

Перечисления в Kotlin это мощная функциональность по созданию сета именованных констант. Они используются для упрощения и улучшения читаемости кода, а также для расширения функционала имеющегося. Применяя весь спектр возможностей enum, можно создавать лаконичный и эффективный код, который будет легко понять и поддерживать.


ссылка на оригинал статьи https://habr.com/ru/articles/729824/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *