Kurzusok
/
Elixir
Elixir
/
Feladatok
/
Kitalálós játék
Kitalálós játék

Kitalálós játék

Tanulófeladat

Bevezetés

Többklózos függvények

Az Elixir a nyitott-zárt elv alkalmazását segíti azzal, hogy a függvényeknek több klózt engedélyez, így a szerteágazó, beégetett vezérlési logika helyett célzott függvényekkel könnyedén adhatsz hozzá vagy távolíthatsz el viselkedést.

Az Elixir több függvényklózt és guardokat kínál, hogy ilyeneket írhass:

def number(n) when n == 7 do
  "Awesome, that's my favorite"
end

def number(_n) do
  "That's not my favorite"
end

Futásidőben az Elixir a forrásfájl tetejétől lefelé haladva vizsgálja meg, hogy melyik függvényklózt hívja meg.

A nem használt változók nevét alulvonással kell kezdeni.

Guardok

A guardokkal megakadályozhatod, hogy az Elixir a guardfüggvények argumentumokra vonatkozó kiértékelése alapján hívjon meg függvényeket. A guardok a when kulcsszóval kezdődnek, amelyet egy Boolean-kifejezés követ. A guardfüggvények olyan speciális függvények, amelyek:

  • Tiszták kell legyenek, és nem módosíthatnak semmilyen globális állapotot.
  • Szigorúan true vagy false értéket kell visszaadniuk.

A gyakori guardok listája az Elixir dokumentációjában található. Típusellenőrzéseket, alapvető aritmetikát, összehasonlításokat és szigorúan Boolean operátorokat tartalmaz.

Alapértelmezett argumentumok

A függvények egy vagy több argumentumhoz is megadhatnak alapértelmezett értéket. Nézzük meg ezt a függvényt:

def number(n \\ 13), do: "That's not my favorite"

Fordításkor az Elixir létrehoz egy függvénydefiníciót a number/0 (nincs argumentum) és a number/1 (egy argumentum) számára.

Ha egynél több argumentumnak van alapértelmezett értéke, az alapértelmezett értékek balról jobbra töltik ki a hiányzó argumentumokat.

Ha a függvénynek egynél több klóza van, az alapértelmezett argumentumokat egy függvényfejlécben (vagyis egy törzs nélküli függvényben) kell megadni, még a függvényklózok előtt:

def number(n \\ 13)
def number(n) when n < 10, do: "Dream bigger!"
def number(n) when n > 100, do: "Not that big..."

Utasítások

Egy egyszerű online játékot készítesz, amelyben egy barátod kitalálhat egy titkos számot. Szeretnél valamilyen visszajelzést adni, de úgy, hogy egy tippel se áruld el a választ. Olyan függvényt kell kitalálnod, amely különböző válaszokat ad attól függően, hogyan viszonyul a tipp a titkos számhoz.

Feltétel Válasz
Amikor a tipp megegyezik a titkos számmal "Correct"
Amikor a tipp eggyel több vagy eggyel kevesebb a titkos számnál "So close"
Amikor a tipp nagyobb a titkos számnál "Too high"
Amikor a tipp kisebb a titkos számnál "Too low"
Amikor nem érkezik tipp "Make a guess"

Minden tipp és titkos szám egész szám.

1. Add meg a választ, amikor a tipp megegyezik a titkos számmal

Valósítsd meg a compare/2 függvényt, amely két argumentumot kap, a secret_number és a guess értéket, és mindkettő egész szám.

GuessingGame.compare(5, 5)
# => "Correct"

2. Add meg a választ, amikor a tipp nagyobb a titkos számnál

Módosítsd a compare függvényt, hogy válaszoljon azokra a tippekre, amelyek nagyobbak a titkos számnál.

GuessingGame.compare(5, 8)
# => "Too high"

3. Add meg a választ, amikor a tipp kisebb a titkos számnál

Módosítsd a compare függvényt, hogy válaszoljon azokra a tippekre, amelyek kisebbek a titkos számnál.

GuessingGame.compare(5, 2)
# => "Too low"

4. Add meg a válaszokat, amikor a tipp eggyel több vagy eggyel kevesebb a titkos számnál

Módosítsd a compare függvényt, hogy válaszoljon azokra a tippekre, amelyek közel vannak a titkos számhoz.

GuessingGame.compare(5, 6)
# => "So close"
GuessingGame.compare(5, 4)
# => "So close"

5. Add meg a választ, amikor nincs tipp

Módosítsd a compare függvényt, hogy akkor is válaszoljon, ha nincs tipp.

GuessingGame.compare(5)
# => "Make a guess"

GuessingGame.compare(5, :no_guess)
# => "Make a guess"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Kitalálós játék 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.