Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

enum

Тот редкий случай, когда в Kotlin ключевое слово enum используется до ключевого слова class. В Kotlin enum относится к разряду мягких ключевых слов (soft keyword), которое является ключевым только перед ключевым словом class. В других случаях вы можете использовать его свободно как простое имя переменной.


enum class Color {
    RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}

val myColor = Color.BLUE

Получить все значения перечисления.


for (color in Color.values()){
    println("name: ${color.name}, ordinal: ${color.ordinal}")
}

В отличие от Java вы можете в перечислении задавать свойства и определять функции. Учебный пример от разработчиков языка.


enum class Color(
    val r: Int, val g: Int, val b: Int
) {
    RED(255, 0, 0), ORANGE(255, 165, 0),
    YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
    INDIGO(75, 0, 130), VIOLET(238, 130, 238);

    fun rgb() = (r * 256 + g) * 256 + b
}

fun main(args: Array<String>) {
    println(Color.BLUE.rgb())
}

В примере мы определили три отдельных переменных r, g, b, затем задали список перечислений и функцию для вычисления значения цвета. Обратите внимание, что в одном месте используется обязательная точка с запятой перед вызовом функции.

Конечно, мы можем писать и простые перечисления без всяких функций.


enum class Color2(
    val color: String        
) {
    RED("Red"), 
    ORANGE("Orange"),
    YELLOW("Yellow"), 
    GREEN("Green"), 
    BLUE("Синий");
}

fun main(args: Array<String>) {
    println(Color2.BLUE.name)
    println(Color2.BLUE.color)
}

Мы можем получить как имя константы в перечислении, так и его значение с помощью встроенного свойства name и созданного свойства color.

Можно задать и значение по умолчанию.


enum class Color2(
    val color: String, val gender: String?="Кот"       
) {
    RED("Red"), 
    ORANGE("Orange"),
    YELLOW("Yellow"), 
    GREEN("Green"), 
    BLUE("Синий", "Котенок");
}

fun main(args: Array<String>) {
    println(Color2.BLUE.name)
    println(Color2.BLUE.color)
    println(Color2.BLUE.gender)
    println(Color2.RED.gender)
}

По умолчанию у всех цветов будет слово Кот и его указывать не нужно, а у синего мы задаём своё уникальное значение.

Реклама