typestar

Enums en Scala

Un enum de señales cubierto de forma exhaustiva, y otro cuyos casos llevan datos.

// an enum lists a closed set of cases under a single type
enum Signal:
  case Clear, Caution, Danger

// values gives every case in declaration order
val allSignals: Array[Signal] = Signal.values

// a match on an enum needs no default: the compiler knows the cases
def speedLimit(signal: Signal): Int = signal match
  case Signal.Clear => 70
  case Signal.Caution => 30
  case Signal.Danger => 0

// a case may take parameters, and the pattern binds them by name
enum Load:
  case Crates(count: Int)
  case Bulk(tons: Double)
def netKg(load: Load): Double = load match
  case Load.Crates(n) => n * 25.0
  case Load.Bulk(t) => t * 1000.0

Cómo funciona

  1. enum Signal: con case Clear, Caution, Danger cierra un grupo de tres; Signal.values los da en ese orden.
  2. signal match cubre los tres desde Signal.Clear, sin caso por defecto: el compilador avisa antes de ejecutar.
  3. Crates(count: Int) y Bulk(tons: Double) toman parámetros, que Load.Crates(n) vincula por nombre en el patrón.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
20
Caracteres a escribir
622
Tokens
105
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 84 segundos.

Escribe este fragmento

Paso 3 de 3 en Case classes y enums; paso 18 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →

Enums en otros lenguajes