Az Option típus olyan értékek ábrázolására szolgál, amelyek vagy jelen vannak, vagy hiányoznak.
A gleam/option modulban a következőképpen van definiálva:
type Option(a) {
Some(a)
None
}
A Some konstruktor egy értéket csomagol be, amikor az jelen van, a None konstruktor pedig egy érték hiányát jelöli.
Egy Option tartalmához gyakran mintaillesztéssel férünk hozzá.
import gleam/option.{type Option, None, Some}
pub fn say_hello(person: Option(String)) -> String {
case person {
Some(name) -> "Hello, " <> name <> "!"
None -> "Hello, Friend!"
}
}
say_hello(Some("Matthieu"))
// -> "Hello, Matthieu!"
say_hello(None)
// -> "Hello, Friend!"
A gleam/option modul számos hasznos függvényt is definiál az Option típusok kezeléséhez, például az unwrap-ot, amely visszaadja az Option tartalmát, vagy egy alapértelmezett értéket, ha az None.
import gleam/option.{type Option}
pub fn say_hello_again(person: Option(String)) -> String {
let name = option.unwrap(person, "Friend")
"Hello, " <> name <> "!"
}
Josh egy új szerepjátékon dolgozik, és segítségre van szüksége a mechanikák egy részének megvalósításához.
Valósítsd meg az introduce függvényt.
A lopakodó játékosok elrejthetik a nevüket, ilyenkor "Mighty Magician" néven mutatkoznak be.
Egyébként egyszerűen a játékos nevével mutatkoztatjuk be őket.
introduce(Player(name: None, level: 2, health: 8, mana: None))
// -> "Mighty Magician"
introduce(Player(name: Some("Merlin"), level: 2, health: 8, mana: None))
// -> "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, 100 életerejű Player példányt kell visszaadnia.
Ha viszont a játékos karaktere nem halott, a revive függvény None-t ad vissza.
Ha a játékos szintje 10 vagy annál magasabb, 100 manával is újra kell éleszteni.
Ha a játékos szintje 10 alatt van, a manája maradjon érintetlen.
A revive függvénynek meg kell őriznie a játékos szintjét.
let dead_player = Player(name: None, level: 2, health: 0, mana: None)
revive(dead_player)
// -> Some(Player(name: None, level: 2, health: 100, mana: None))
Ha a revive metódust olyan játékoson hívjuk meg, akinek az életereje 1 vagy annál több, a függvénynek None-t kell visszaadnia.
let alive_player = Player(name: None, level: 2, health: 42, mana: None)
revive(alive_player)
// -> None
A cast_spell függvény argumentumként egy Int-et kap, amely megmutatja, mennyi manába kerül a varázslat, valamint egy Player-t.
Visszaadja a frissített játékost és azt a sebzést is, amelyet az elmondott varázslat okoz.
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, nem történik semmi: 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érlete a varázslat manaköltségével csökkenti az életerejét, és nem okoz sebzést.
Tartsd észben, hogy a játékos életereje nem eshet nulla (0) alá.
let wizard = Player(name: None, level: 18, health: 123, mana: Some(30))
let #(wizard, damage) = cast_spell(wizard, 14)
wizard.mana // -> Some 16
damage // -> 28
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.