Enumeraciones
Al contrario de java o c++, Scala no cuenta con enumeraciones. Pero la librería estándar de scala cuenta con una clase Enumeration, que nos ayudara a trabajar con enumeraciones.
Lo que tenemos que hacer es un objeto que extienda de la clase Enumeration:
object TrafficLightColor extends Enumeration {
val Red, Yellow, Green = Value
}
Este objeto tiene 3 propiedades Red, Yellow, Green inicializadas como valor. Alternativamente se le puede pasar al valor un id y un nombre o las dos cosas:
val Red = Value(0, "Stop")
val Yellow = Value(10) // Name "Yellow"
val Green = Value("Go") // ID 11
Si no se especifica el id, se asignara uno más del asignado previamente y por defecto el nombre es el nombre del campo.
Ahora usted se puede referirse a la enumeración TrafficLightColor como TrafficLightColor.Red, TrafficLightColor.Yellow, TrafficLightColor.Green. Si esto resulta tedioso, puede importar la clase:
import TrafficLightColor._
Hay que recordar que los valores Red, Green y Yellow son de tipo Value, no TrafficLightColor, si se quiere se puede definir un alias:
object TrafficLightColor extends Enumeration {
type TrafficLightColor = Value
val Red, Yellow, Green = Value
}
Ahora el tipo TrafficLightColor.TrafficLightColor, se va importar y podremos usarlo:
import TrafficLightColor._
def doWhat(color: TrafficLightColor) = {
if (color == Red) "stop"
else if (color == Yellow) "hurry up"
else "go"
}
El id es el valor retornado cuando se llama a la enumeración y el nombre es lo que se llama cuando se llama al método toString
Si llamamos a TrafficLightColor.values podremos obtener todos los valores:
for (c <- TrafficLightColor.values) println(c.id + ": " + c)
Para terminar, podemos buscar un valor por id o nombre, si deseamos buscar el valor Red :
TrafficLightColor(0) // Calls Enumeration.apply
TrafficLightColor.withName("Red")