Kurzusok
/
Elixir
Elixir
/
Feladatok
/
Kenyér és bájitalok
Kenyér és bájitalok

Kenyér és bájitalok

Tanulófeladat

Bevezetés

Protokollok

A protokollok olyan mechanizmus, amellyel polimorfizmust érhetsz el Elixirben, amikor azt szeretnéd, hogy a viselkedés az adattípustól függően változzon.

A protokollokat a defprotocol kulcsszóval definiálod, és egy vagy több függvényfejlécet tartalmaznak.

defprotocol Reversible do
  def reverse(term)
end

A protokollokat a defimpl kulcsszóval implementálhatod.

defimpl Reversible, for: List do
  def reverse(term) do
    Enum.reverse(term)
  end
end

Egy protokollt implementálhatsz bármely létező Elixir-adattípusra, de egy structra is.

Amikor meghívunk egy protokollfüggvényt, az első argumentum típusa alapján automatikusan kiválasztódik a megfelelő implementáció.

Utasítások

A saját szerepjátékodat fejleszted. A játékodban karakterek és tárgyak vannak. A tárggyal sokféle műveletet végezhetsz, és ezek egyike, hogy megetetsz vele egy karaktert.

Nem minden tárgy ehető, és nem minden ehető tárgy hat ugyanúgy a karakterre. Némelyik tárgy megevés után más tárggyá alakul (például ha megeszel egy almát, marad utána egy almacsutka).

Hogy mindez ilyen rugalmas lehessen, úgy döntöttél, hogy létrehozol egy Edible protokollt, amelyet a tárgyak egy része megvalósíthat.

1. Határozd meg az ehetőséget

Hozd létre az RPG.Edible protokollt. A protokollnak egyetlen függvénye van: az eat. Az eat függvény kap egy tárgyat és egy karaktert, és visszaad egy mellékterméket meg egy karaktert.

2. Tedd ehetővé a kenyereket

Valósítsd meg az RPG.Edible protokollt az RPG.LoafOfBread tárgyhoz. Megevéskor a kenyér 5 életpontot ad a karakternek, és nincs mellékterméke.

RPG.Edible.eat(%RPG.LoafOfBread{}, %RPG.Character{health: 31})
# => {nil, %RPG.Character{health: 36, mana: 0}}

3. Tedd ehetővé a manaitalokat

Valósítsd meg az RPG.Edible protokollt az RPG.ManaPotion tárgyhoz. Megevéskor a manaital annyi manapontot ad a karakternek, amennyi az ital ereje, és egy üres üveget hoz létre.

RPG.Edible.eat(%RPG.ManaPotion{strength: 13}, %RPG.Character{mana: 50})
# => {%RPG.EmptyBottle{}, %RPG.Character{health: 100, mana: 63}}

4. Tedd ehetővé a mérgeket

Valósítsd meg az RPG.Edible protokollt az RPG.Poison tárgyhoz. Megevéskor a méreg elveszi a karakter összes életpontját, és egy üres üveget hoz létre.

RPG.Edible.eat(%RPG.Poison{}, %RPG.Character{health: 3000})
# => {%RPG.EmptyBottle{}, %RPG.Character{health: 0, mana: 0}}
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Kenyér és bájitalok feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.