Свойства и методы перечислений
Добавляйте поведение
«Свойства и методы перечислений» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Перечисления могут содержать данные
Константы перечисления могут содержать свойства. Объявите конструктор класса перечисления и передайте значения при перечислении его констант.
enum class Coin(val cents: Int) {
PENNY(1), NICKEL(5), DIME(10)
}
fun main() {
println(Coin.DIME.cents)
}Параметры конструктора
Значения в скобках после каждой константы являются аргументами конструктора перечисления. Они становятся свойствами этой константы, доступными только для чтения.
enum class Planet(val gravity: Double) {
EARTH(9.8), MOON(1.6)
}
fun main() {
println(Planet.MOON.gravity)
}Несколько свойств
Перечисление может объявлять сразу несколько свойств.
enum class Fruit(val color: String, val calories: Int) {
APPLE("red", 95),
BANANA("yellow", 105)
}
fun main() {
val f = Fruit.BANANA
println("${f.color} ${f.calories}")
}Добавление методов
В теле перечисления можно объявлять обычные функции. Все константы используют их совместно.
enum class Temp(val celsius: Int) {
COLD(5), WARM(25);
fun toFahrenheit(): Int = celsius * 9 / 5 + 32
}
fun main() {
println(Temp.WARM.toFahrenheit())
}Правило точки с запятой
Если у перечисления есть члены помимо констант — методы или свойства, — после последней константы необходимо поставить точку с запятой.
enum class Op {
ADD, SUB;
fun describe() = "Operation: $name"
}
fun main() {
println(Op.ADD.describe())
}Абстрактные методы для каждой константы
Перечисления могут объявлять абстрактные методы, которые переопределяет каждая константа, получая собственное поведение.
enum class Math {
PLUS { override fun apply(a: Int, b: Int) = a + b },
TIMES { override fun apply(a: Int, b: Int) = a * b };
abstract fun apply(a: Int, b: Int): Int
}
fun main() {
println(Math.TIMES.apply(3, 4))
}Вычисляемые свойства
Геттеры свойств могут вычислять значения на основе данных константы.
enum class Account(val balance: Int) {
SAVINGS(1000), CHECKING(50);
val isRich: Boolean get() = balance > 500
}
fun main() {
println(Account.SAVINGS.isRich)
}Сочетание данных и поведения
Свойства и методы позволяют перечислению моделировать богатую замкнутую предметную область.
enum class Shape(val sides: Int) {
TRIANGLE(3), SQUARE(4);
fun describe() = "$name has $sides sides"
}
fun main() {
println(Shape.SQUARE.describe())
}Использование свойств в логике
Свойства констант удобны в вычислениях и условиях.
enum class Tier(val discount: Int) {
BRONZE(5), GOLD(20)
}
fun price(base: Int, tier: Tier) = base - base * tier.discount / 100
fun main() {
println(price(100, Tier.GOLD))
}Значения свойств по умолчанию
Конструкторы перечислений, как и любые конструкторы, поддерживают значения параметров по умолчанию.
enum class Role(val canEdit: Boolean = false) {
VIEWER, EDITOR(true)
}
fun main() {
println(Role.VIEWER.canEdit)
println(Role.EDITOR.canEdit)
}Полная модель
Здесь перечисление моделирует HTTP-статусы, сочетая данные и поведение.
enum class Http(val code: Int) {
OK(200), NOT_FOUND(404);
fun isError() = code >= 400
}
fun main() {
println(Http.NOT_FOUND.isError())
}Быстрая проверка
Проверьте, насколько Вы поняли свойства и методы перечислений.
Повторение
Вы узнали, что перечисления могут содержать поведение:
- Добавьте конструктор, чтобы наделить константы свойствами.
- Объявляйте общие методы, используя точку с запятой после констант.
- Абстрактные методы позволяют каждой константе определять собственное поведение.
- Вычисляемые свойства и свойства со значениями по умолчанию работают как обычно.
enum class Coin(val cents: Int) {
PENNY(1), DIME(10);
fun double() = cents * 2
}
fun main() {
println(Coin.DIME.double())
}Часто задаваемые вопросы
Урок «Свойства и методы перечислений» бесплатный?
Да — полный текст урока «Свойства и методы перечислений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Свойства и методы перечислений»?
Добавляйте поведение Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Свойства и методы перечислений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Определение перечислений
- Свойства и методы перечислений
- Перечисления с when
- Значения и порядковые номера перечислений