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.
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:
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.
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..."
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.
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"
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"
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"
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"
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"
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.