0Pricing
Kotlin Academy · Урок

Свойства и методы перечислений

Добавляйте поведение

«Свойства и методы перечислений» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Определение перечислений
  2. Свойства и методы перечислений
  3. Перечисления с when
  4. Значения и порядковые номера перечислений
← Назад к Kotlin Academy