A Maybe típus az Elm nyelv megoldása az opcionális értékekre. Ezért számos alapvető Elm-függvény típusszignatúrájában szerepel, és elengedhetetlen a megértése. A Maybe típus definíciója a következő:
type Maybe a = Nothing | Just a
Ez az Elm terminológiában „egyedi típus” definícióként ismert. Azt jelzi, hogy egy ilyen típusú érték vagy Nothing, vagy Just valami a típusú. Egy Maybe értéket a két konstruktorának, a Nothing-nak és a Just-nak valamelyikével hozunk létre. A Maybe tartalmának kiolvasása mintaillesztéssel történik.
matthieu : Maybe String
matthieu = Just "Matthieu"
anon : Maybe String
anon = Nothing
sayHello : Maybe String -> String
sayHello maybeName =
case maybeName of
Nothing -> "Hello, World!"
Just someName -> "Hello, " ++ someName ++ "!"
sayHello matthieu
--> "Hello, Matthieu!"
sayHello anon
--> "Hello, World!"
A Maybe modulban is számos hasznos függvény található a Maybe típusok kezelésére.
sayHelloAgain : Maybe String -> String
sayHelloAgain name = "Hello, " ++ Maybe.withDefault "World" name ++ "!"
capitalizeName : Maybe String -> Maybe String
capitalizeName name = Maybe.map String.toUpper name
capitalizeName matthieu
--> Just "MATTHIEU"
capitalizeName anon
--> Nothing
Ebben a feladatban egy szerepjáték mechanikáit fogod megvalósítani. A játékos karakterét a következő típus írja le:
type alias Player =
{ name : Maybe String
, level : Int
, health : Int
, mana : Maybe Int
}
A játékban a játékosoknak el kell érniük a 10. szintet, hogy feloldják a manapooljukat, és elkezdhessenek varázslatokat szórni. Ebben a játékban két funkcióval foglalkozol: a feltámasztás és a varázslás mechanikájával.
Írd meg az introduce függvény tartalmát.
A lopakodó játékosok elrejthetik a nevüket, és "Mighty Magician" néven mutatkoznak be.
Egyébként egyszerűen a saját neveddel mutatkozz be.
introduce { name = Nothing, level = 2, health = 8, mana = Nothing }
--> "Mighty Magician"
introduce { name = Just "Merlin", level = 2, health = 8, mana = Nothing }
--> "Merlin"
A revive függvénynek ellenőriznie kell, hogy a játékos karaktere valóban halott-e (az életereje elérte a 0-t).
Ha igen, egy új Player példányt kell visszaadnia 100 életerővel.
Ellenkező esetben, ha a játékos karaktere nem halott, a revive függvény Nothing-t ad vissza.
Ha a játékos szintje 10 vagy annál magasabb, akkor 100 manával kell feltámasztani.
Ha a játékos szintje 10 alatt van, a manája Nothing legyen.
A revive függvénynek meg kell őriznie a játékos szintjét.
deadPlayer = { name = Nothing, level = 2, health = 0, mana = Nothing }
revive deadPlayer
--> Just { name = Nothing, level = 2, health = 100, mana = Nothing }
Ha a revive metódust olyan játékoson hívod meg, akinek az életereje 1 vagy annál több, akkor a függvénynek Nothing-t kell visszaadnia.
alivePlayer = { name = Nothing, level = 2, health = 42, mana = Nothing }
revive alivePlayer
--> Nothing
A castSpell függvény argumentumként egy Int-et kap, amely megadja, mennyi manába kerül a varázslat, valamint egy Player-t.
Visszaadja a frissített játékost, valamint az elszórt varázslat által okozott sebzés mértékét.
Egy sikeres varázslás a varázslat manaköltségének kétszeresével egyenlő sebzést okoz.
Ha azonban a játékosnak nincs elég manája, semmi sem történik, a játékos változatlan marad, és nem keletkezik sebzés.
Ha a játékosnak még manapoolja sincs, a varázslás kísérletekor az életereje a varázslat manaköltségével csökken, és nem okoz sebzést.
wizard = { name = Nothing, level = 18, health = 123, mana = Just 30 }
( updatedWizard, damage ) = castSpell 14 wizard
updatedWizard.mana --> Just 16
damage --> 28
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.