Az Elixir atom típusa egy rögzített konstanst jelöl. Egy atom értéke egyszerűen a saját neve. Ezzel típusbiztos módon dolgozhatunk az adatokkal. Az atomokat a következőképpen definiálhatjuk:
# All atoms are preceded with a ':' then follow with alphanumeric snake-cased characters
variable = :an_atom
Az atomokat belül egy egész szám reprezentálja egy keresőtáblában, és ezek a számok automatikusan állítódnak be. Ezt a belső értéket nem lehet megváltoztatni.
Gyakran olyan kódot szeretnénk írni, amely egy feltétel alapján elágazik. Bár az Elixirben erre sokféle módszer van, az egyik legegyszerűbb a cond/1 használata.
A legegyszerűbb formájában a cond egy vagy több ág közül az első olyan úton halad tovább, amely true értéket ad:
cond do
x > 10 -> :this_might_be_the_way
y < 7 -> :or_that_might_be_the_way
true -> :this_is_the_default_way
end
Ha egyetlen útvonal sem értékelődik ki true-ra, a futtatókörnyezet hibát dob.
Egy olyan rendszert üzemeltetsz, amely több alkalmazásból áll, és ezek rengeteg naplót állítanak elő. Szeretnél írni egy kis programot, amely összesíti ezeket a naplókat, és súlyossági szintjüknek megfelelő címkékkel látja el őket. A rendszeredben minden alkalmazás ugyanazokat a naplókódokat használja, de néhány régi alkalmazás nem támogatja az összes kódot.
| Naplókód | Naplócímke | Támogatott a régi alkalmazásokban? |
|---|---|---|
| 0 | trace | nem |
| 1 | debug | igen |
| 2 | info | igen |
| 3 | warning | igen |
| 4 | error | igen |
| 5 | fatal | nem |
| egyéb / nem támogatott | unknown | - |
Valósítsd meg a LogLevel.to_label/2 függvényt. A függvény egy egész szám típusú kódot és egy Boolean jelzőt kap, amely megmondja, hogy a napló régi alkalmazásból származik-e, visszatérési értéke pedig a naplósor címkéje atomként.
A táblázatban nem szereplő naplókódok unknown címkét adjanak vissza. Azok a naplókódok is unknown címkét adjanak vissza, amelyek a táblázatban a régi alkalmazásokban nem támogatottként szerepelnek, ha a napló régi alkalmazásból érkezett.
LogLevel.to_label(0, false)
# => :trace
LogLevel.to_label(0, true)
# => :unknown
Ha valami váratlan történik, arról valakinek értesülnie kell.
Valósítsd meg a LogLevel.alert_recipient/2 függvényt, amely meghatározza, kinek kell elküldeni a riasztást. A függvény egy egész szám típusú kódot és egy Boolean jelzőt kap, amely megmondja, hogy a napló régi alkalmazásból származik-e, és a címzett nevét adja vissza atomként.
Használd az előző részfeladatban megírt LogLevel.to_label/2 függvényt. Ha a naplócímke error vagy fatal, a riasztást az ops csapatnak küldd. Ha egy régi rendszerből unknown címkével érkező naplót kapsz, a riasztást a dev1 csapatnak küldd; minden más unknown címkét a dev2 csapatnak kell elküldeni. Minden más naplócímkét nyugodtan figyelmen kívül hagyhatsz, ilyenkor false a visszatérési érték.
LogLevel.alert_recipient(-1, true)
# => :dev1
LogLevel.alert_recipient(0, false)
# => false
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.