![](https://habrastorage.org/getpro/habr/upload_files/6b8/000/44e/6b800044efa906a1bcd43088de28c56e.jpg)
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, можно создавать лаконичный и эффективный код, который будет легко понять и поддерживать.