A Gleamben az egyedi típusokkal lehet új adattípusokat definiálni. Több változatuk is lehet, mindegyiknek saját neve van.
pub type Season {
Spring
Summer
Autumn
Winter
}
Egy egyedi típus minden változata opcionálisan tartalmazhat adatot, és a különböző változatok különböző típusú adatokat tárolhatnak. Ha egy változat tartalmaz adatot, azt rekordnak nevezzük.
pub type Number {
SomeInt(Int)
SomeFloat(Float)
Invalid
}
Egy adott változat értékét úgy hozhatjuk létre, hogy a nevére hivatkozunk, ha nem tartalmaz további adatot (Spring), vagy függvényként hívjuk meg, ha tartalmaz (SomeInt(2)).
let spring = Spring
let integerTwo = SomeInt(2)
Az egyedi típusok, akárcsak a Gleam minden eleme, strukturális egyenlőséggel rendelkeznek, ami azt jelenti, hogy két azonos változatú és azonos adattartalmú érték egyenértékű.
Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False
Az egyedi típusok változataira case kifejezésekkel lehet mintailleszteni.
import gleam/int
import gleam/float
pub fn describe(flexible_number: Number) -> String {
case flexible_number {
SomeFloat(f) -> "Float: " <> float.to_string(f)
SomeInt(i) -> "Int: " <> int.to_string(i)
Invalid -> "Neither a float nor an int"
}
}
Ebben a feladatban Valentin-nap van, és a pároddal valami kellemes közös programot terveztek. A párodnak rengeteg ötlete van, és most megkér, hogy értékeld ezeket az ötleteket, hogy megtaláljá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 egyes ötletére három lehetőség egyikével válaszolsz: igen, nem vagy talán.
Definiáld az Approval egyedi típust, amely ezeket a lehetőségeket a következő három esetként ábrázolja: Yes, No és Maybe.
A párod két lehetséges éttermet választott: az egyik a koreai konyhára épül, a másik a török konyhára.
Definiáld a Cuisine egyedi típust, amely ezeket a konyhákat a következő két esetként ábrázolja: Korean és Turkish.
Rengeteg film közül lehet választani, ezért hogy szűkítsük a kört, a párod megadja a műfajukat is.
Definiáld a Genre egyedi típust, amely a következő műfajokat esetké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ékot játszani, kikapcsolódni, filmet nézni, étterembe menni és sétálni.
Definiáld az Activity egyedi típust, amely ezeket a tevékenységtípusokat ábrázolja:
BoardGame: nincs hozzá tartozó adata.Chill: nincs hozzá tartozó adata.Movie: hozzá tartozó adatként a Genre-t tartalmazza.Restaurant: hozzá tartozó adatként a Cuisine-t tartalmazza.Walk: hozzá tartozó adatként egy Int-et tartalmaz, amely a megteendő kilométerek számát adja meg.Végül készen állsz, hogy értékeld a párod ötleteit. Így érzel a párod ötletéről:
Valósítsd meg a rate_activity nevű függvényt, amely egy Activity értéket vesz át, és a fenti érzések alapján visszaadja az Approval értéket:
rate_activity(Restaurant(Turkish))
// -> Maybe
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Gleam nyelvet 33 fogalom122 feladat segítségével, valódi emberi mentorálással, mindez ingyen.