Summary
- Kotlin enumerations are similar to enumerations in other languages, such as Java
- Enumerations are declared with enum class
- Enumerations can have constructor parameters, properties, and functions
- Enumerations can be used in ifandwhenexpressions andforloops
Basic enumerations
Simple enumerations are a useful tool for creating small groups of constants, things like the days of the week, months in a year, suits in a deck of cards, etc., situations where you have a group of related, constant values. Here are the days of the week:
enum class DayOfWeek {
    SUNDAY, MONDAY, TUESDAY,
    WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Here’s an enumeration for the suits in a deck of cards:
enum class Suit {
    CLUBS, SPADES, DIAMONDS, HEARTS
}
The full power of enumerations
More than just simple constants, enumerations can have constructor parameters, properties, and functions, just like a regular class. Here’s an example, adapted from this Oracle Java example:
enum class Planet(val mass: Double, val radius: Double) {
    // just the first three planets
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6);  //semi-colon is required
    // universal gravitational constant (m3 kg-1 s-2)
    val G = 6.67300E-11
    fun surfaceGravity(): Double {
        return G * mass / (radius * radius);
    }
    fun surfaceWeight(otherMass: Double): Double {
        return otherMass * surfaceGravity();
    }
}
fun main(args: Array<String>) {
    val earthWeight = 200.0
    val mass = earthWeight / Planet.EARTH.surfaceGravity()
    for (p in Planet.values()) {
        val s = String.format("Your weight on %s is %.2f", p, p.surfaceWeight(mass))
        println(s)
    }
}
Here’s the output from that code:
Your weight on MERCURY is 75.55
Your weight on VENUS is 181.00
Your weight on EARTH is 200.00
Enumerations with if, when, and for
Enumerations can be used with if and when expressions and for loops, as shown in the following examples.
if expressions:
enum class DayOfWeek {
    SUNDAY, MONDAY, TUESDAY,
    WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
fun main(args: Array<String>) {
    val today = DayOfWeek.MONDAY
    if (today == DayOfWeek.MONDAY) {
        println("MONDAY")
    }
    else if (today == DayOfWeek.TUESDAY) {
        println("TUESDAY")
    }
}
when expressions:
enum class Margin {
    TOP, RIGHT, BOTTOM, LEFT
}
fun getMarginValue(margin: Margin) = when(margin) {
    Margin.TOP    ->  "1em"
    Margin.RIGHT  ->  "12px"
    Margin.BOTTOM ->  "1.5em"
    Margin.LEFT   ->  "6px"
}
fun main(args: Array<String>) {
    println(getMarginValue(Margin.TOP))
}
for loops:
for (m in Margin.values()) println(m)