Az Elixirben ahhoz, hogy egy felsorolható adatszerkezetből (pl. listából, tartományból) véletlenszerű elemet válasszunk, az Enum.random függvényt használjuk. Ez a függvény egyetlen elemet választ ki, méghozzá úgy, hogy minden elem kiválasztásának ugyanakkora a valószínűsége.
Az Elixirnek nincsenek saját függvényei véletlenszerű lebegőpontos szám előállítására. Ehhez közvetlenül az Erlangot kell használnunk.
Az Elixir kódja a BEAM virtuális gépen fut. A BEAM az Erlang Run-Time System része. Az Elixirt az Erlang ihlette, és ugyanabban a futtatókörnyezetben fut, ezért kiválóan együttműködik az Erlang-könyvtárakkal. Ez azt jelenti, hogy az Elixir-fejlesztők az Elixir-kódjukból is használhatják az Erlang-könyvtárakat. Sőt, az Elixir közösségében nem nézik jó szemmel, ha valaki olyan funkciókra ír Elixir-könyvtárat, amelyeket már az Erlang-könyvtárak is biztosítanak.
Emiatt bizonyos funkciók, például a matematikai műveletek vagy az időzítőfüggvények, az Elixirben csak az Erlagon keresztül érhetők el.
Az Erlang standard könyvtárát minden további lépés nélkül használhatjuk az Elixir-kódunkban.
Az Erlang-függvényeket ugyanúgy hívhatjuk meg, ahogy az Elixir-függvényeket, egy apró különbséggel. Az Erlang-modulok nevei snake_case atomok. Ha például a math modul pi/0 függvényét szeretnénk meghívni, így írnánk:
:math.pi()
# => 3.141592653589793
A leggyakrabban használt Erlang-függvények, amelyeknek nincs Elixir megfelelőjük:
:timer.sleep/1, amely a megadott ezredmásodpercnyi időre felfüggeszti a folyamatot.:rand.uniform/0, amely egy véletlenszerű x lebegőpontos számot állít elő, ahol 0.0 <= x < 1.0.:io_lib.format/2, amellyel C-stílusú stringformázást végezhetünk (vezérlőszekvenciák segítségével). Ezzel a függvénnyel például kiírhatunk egy egész számot tetszőleges, 2 és 36 közötti számrendszerben, vagy formázhatunk egy lebegőpontos számot a kívánt pontossággal. Vedd figyelembe, hogy ez a függvény, akárcsak sok más Erlang-függvény, charlistet ad vissza.math modul, amely matematikai függvényeket biztosít, például sin/1, cos/1, log2/1, log10/1, pow/2 és még sok mást.Ha szeretnéd felfedezni az Erlang standard könyvtárát, böngészd át a STDLIB Reference Manual oldalt.
Mary nagy rajongója a Star Trek: The Next Generation tévésorozatnak. Gyakran játszik tollal és papírral játszható szerepjátékokat, amelyekben ő és a barátai a Starship Enterprise legénységét alakítják. Mary karaktere Picard kapitány, ami azt jelenti, hogy neki kell vezetnie a kapitányi naplót. Imádja a játék kreatív részét, de nem szeret a helyszínen véletlenszerű adatokat generálni.
Segíts Marynek véletlenszerű generátorokat készíteni a kapitányi naplóban gyakran megjelenő adatokhoz.
A Starship Enterprise útjai során sok bolygóval találkozik. A Star Trek univerzumában a bolygókat tulajdonságaik alapján kategóriákba sorolják. A Föld például egy M osztályú bolygó. Az összes lehetséges bolygóosztály: D, H, J, K, L, M, N, R, T és Y.
Implementáld a random_planet_class/0 függvényt. A bolygóosztályok egyikét kell véletlenszerűen visszaadnia.
CaptainsLog.random_planet_class()
# => "K"
Az Enterprise (lajstromszáma NCC-1701) nem az egyetlen csillaghajó, amelyik az űrben repked! Amikor egy másik csillaghajóval találkozik, Marynek naplóznia kell annak a csillaghajónak a lajstromszámát.
A lajstromszámok az „NCC-” előtaggal kezdődnek, majd egy 1000 és 9999 közötti (a határokat is beleértve) szám következik.
Implementáld a random_ship_registry_number/0 függvényt, amely egy véletlenszerű csillaghajó-lajstromszámot ad vissza.
CaptainsLog.random_ship_registry_number()
# => "NCC-1947"
Mi értelme a naplónak, ha nem tartalmaz dátumokat?
A csillagidő egy lebegőpontos szám. A Starship Enterprise kalandjai a The Next Generation első évadában a 41000.0 és 42000.0 közötti csillagidőkben játszódnak. A „4” a 24. századot jelöli, az „1” pedig az első évadot.
Implementáld a random_stardate/0 függvényt, amely egy 41000.0 (a határt is beleértve) és 42000.0 (a határt kizárva) közötti lebegőpontos számot ad vissza.
Az implementációhoz egy Erlang-függvényt kell használni.
CaptainsLog.random_stardate()
# => 41458.15721310934
A kapitányi naplóban a csillagidőket általában egyetlen tizedesjegyre kerekítik.
Implementáld a format_stardate/1 függvényt, amely egy lebegőpontos számot kap, és egy stringet ad vissza a szám egyetlen tizedesjegyre kerekített értékével.
Az implementációhoz egy Erlang-függvényt kell használni.
CaptainsLog.format_stardate(41458.15721310934)
# => "41458.2"
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.