EcmaScript2015 Enumeration zum Selbermachen
1unitedpower
- javascript
- programmiertechnik
JavaScript hat bekanntermaßen kein natives Syntax-Element für Enumerations. Mit der neuesten Version der Sprache ist das allerdings in 3 Zeilen selber gebastelt.
// Definition
function* Enum (name = 'Unnamed enumeration') {
while (true) yield Symbol(name)
}
// Usage
const [cat,dog,catdog] = Enum('animal')
const [red,green,blue] = Enum('color')
// Test
console.assert(cat === cat, 'Identity violated')
console.assert(cat !== red, 'Uniqueness violated')
console.assert(cat !== dog, 'Uniqueness violated')
console.assert(cat !== catdog, 'Uniqueness violated')
// Demo
console.log(pet(cat))
console.log(pet(dog))
console.log(pet(catdog))
//: Animal -> String
function pet (animal) {
return {
[cat] : 'Mauz',
[dog] : 'Wuff',
[catdog] : 'Mauff'
}[animal]
}
Mit dem Aufruf Symbol()
erzeugt man jedes Mal einen neuen eindeutigen Wert. Mit der etwas abenteuerlich anmutendenden Generator-Funktion Enum
kann man dann unendliche Streams von Symbolen erzeugen, das passiert im gezeigten Code jeweils einmal für die Enumeration von Tieren und von Farben. Anschließend werden aus jedem Stream drei Elemente entnommen und an die Konstanten cat,dog,catdog
bzw. red,gree,blue
gebunden. Wer jetzt gerade keine JavaScript-Enginge mit Unterstützung für die benötigten Features zur Hand hat, der möge es online in vollter Tracht betrachten: http://www.es6fiddle.net/il5jokw5/