Az Elm Custom Type-jai rögzített számú, elnevezett esetet jelölnek. Minden érték pontosan az egyik elnevezett esetnek felel meg.
Egy Custom Type-ot a type kulcsszóval definiálsz, és nagyon kevés szintaxist igényel. Ez az Elm programozás egyik legfontosabb technikája, amely arra szolgál, hogy a kódban lehetséges értékek pontosan megfeleljenek a valós életben érvényes értékeknek. Így nem marad hely az érvénytelen adatoknak, és a lehetetlen állapotokat lehetetlenné teszi a kódban.
type Season
= Spring
| Summer
| Autumn
| Winter
Egy custom type minden esetéhez tartozhat opcionálisan adat, és a különböző esetekhez különböző típusú adat tartozhat. Ha egyik esethez sem tartozik adat, a diszkriminált unió hasonló ahhoz, amit más nyelvek általában felsorolásnak (vagy enumnak) neveznek.
type FlexibleNumber
= Integer Int
| Float Float
| Invalid
Egy adott eset értékét úgy hozhatod létre, hogy a nevére hivatkozol (Spring), ha az ugyanabban a modulban van definiálva, vagy az import SeasonModule exposing (Season(..)) formájú szintaxissal van importálva, illetve a teljesen minősített nevére hivatkozol (Season.Spring), ha az import SeasonModule exposing (Season) formájú szintaxissal van importálva.
integerTwo = Integer 2
invalid = FlexibleNumber.Invalid
A custom type-ok az Elm minden más eleméhez hasonlóan strukturális egyenlőséggel rendelkeznek, ami azt jelenti, hogy két érték, amely ugyanahhoz az esethez tartozik és ugyanazzal az (opcionális) adattal rendelkezik, egyenértékű.
A custom type-okkal való munka előnyben részesített módja a mintailesztés:
let describe flexibleNumber =
case flexibleNumber of
Integer i ->
"Integer: " ++ fromInt(i)
Float f ->
"Float: " ++ fromFloat(f)
Invalid ->
"Invalid"
Ebben a feladatban Valentin-nap van, és te meg a párod valami szép közös programot terveztek. A párodnak rengeteg ötlete van, és most arra kér, hogy értékeld ezeket az ötleteket, hogy kiválasszátok, mihez kezdjetek.
A párod a következő ötleteket javasolja:
Hat részfeladat segít kiválasztani a Valentin-napi programot.
A párod minden javasolt ötletére három lehetőség egyikével válaszolsz: igen, nem vagy talán.
Definiáld az Approval Custom Type-ot, hogy ezeket a lehetőségeket a következő három esettel ábrázolja: Yes, No és Maybe.
A párod két lehetséges éttermet választott ki: az egyik a koreai konyhára épül, a másik a török konyhára.
Definiáld a Cuisine Custom Type-ot, hogy ezeket a konyhákat a következő két esettel ábrázolja: Korean és Turkish.
Rengeteg film közül lehet választani, ezért hogy szűkítse a kört, a párod a műfajukat is felsorolja.
Definiáld a Genre Custom Type-ot, hogy a következő műfajokat esetekként ábrázolja: Crime, Horror, Romance és Thriller.
Ahogy már említettük, a párod öt különböző tevékenységgel állt elő: társasjáték, kikapcsolódás, filmnézés és étterembe menni.
Definiáld az Activity Custom Type-ot, hogy ezeket a tevékenységtípusokat ábrázolja:
BoardGame: nincs hozzá tartozó adat.Chill: nincs hozzá tartozó adat.Movie: a Genre a hozzá tartozó adata.Restaurant: a Cuisine a hozzá tartozó adata.Végül készen állsz, hogy értékeld a párod ötleteit. Így érzel a párod ötleteiről:
Készíts egy rateActivity nevű függvényt, amely átvesz egy Activity értéket, és a fenti érzések alapján visszaadja az Approval értéket:
rateActivity (Restaurant Turkish)
-- => Maybe
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elm nyelvet 28 fogalom110 feladat segítségével, valódi emberi mentorálással, mindez ingyen.