Kurzusok
/
Elixir
Elixir
/
Feladatok
/
Konyhai számológép
Konyhai számológép

Konyhai számológép

Tanulófeladat

Bevezetés

Tuple-ök

Az Elixirben a tuple egy olyan adatszerkezet, amely adatokat rendez el, rögzített számú, bármilyen típusú elemet tartalmaz, de az egyes elemeknek nincs kifejezett nevük. A tuple-öket az Elixirben gyakran használják memóriaolvasás-igényes műveletekhez, mert egy elem kiolvasása konstans idejű művelet. Általában nem használjuk őket olyankor, amikor elemeket dinamikusan kell hozzáadni vagy eltávolítani, mert a meglévő tuple módosítása helyett új tuple jön létre, amihez előre memóriát kell lefoglalni.

A gyakorlatban az Elixirben kapcsos zárójelekkel hozunk létre tuple-t. Egy tuple elemei egyenként elérhetők az elem/2 függvénnyel, nulla alapú indexeléssel:

empty_tuple = {}
one_element_tuple = {1}
multiple_element_tuple = {1, :a, "hello"}

elem(multiple_element_tuple, 2)
# => "hello"

Tuple-ök mint csoportosított információ

A tuple-öket a gyakorlatban gyakran csoportosított információ ábrázolására használják.

Float.ratio(0.25)
# => {1, 4} indicating the numerator and denominator of the fraction ¼

Mintaillesztés

A mintaillesztés használata meghatározó az Elixir magabiztos, idiomatikus kódjában. Talán emlékszel rá, hogy a =/2 operátort inkább illesztő operátorként, mintsem értékadó operátorként írják le. Amikor az illesztő operátort használod, és a bal oldali minta illeszkedik a jobb oldalra, akkor a bal oldalon lévő változók értéket kapnak, a kifejezés értéke pedig a jobb oldal értéke lesz. Ha nincs egyezés, MatchError kivétel keletkezik.

2 = 2
# => 2
# Literals can be matched if they are the same

2 = 3
# => ** (MatchError) no match of right hand side value: 3

{_, denominator} = Float.ratio(0.25)
# => {1, 4}
# the variable `denominator` is bound to the value 4

Ne feledd, az illesztés jobbról balra történik.

Az utolsó példában, ha nincs szükségünk egy változóra a mintaillesztésben, akkor a _-ra hivatkozva eldobhatjuk. A futtatókörnyezet nem követi nyomon azokat a változókat, amelyek _-tal kezdődnek.

Mintaillesztés nevesített függvényekben

A mintaillesztés akkor is hasznos eszköz, amikor több függvényklauzulát hozunk létre. A mintaillesztést a függvények argumentumain is használhatjuk, ami meghatározza, hogy melyik függvényklauzula hívódik meg, a fájl tetejétől lefelé haladva az első egyezésig. A változók a függvényfejben kötődhetnek, és a függvénytörzsben használhatók.

defmodule Example do
  def named_function(:a = variable_a) do
    {variable_a, 1}
  end

  def named_function(:b = variable_b) do
    {variable_b, 2}
  end
end

Example.named_function(:a)
# => {:a, 1}

Example.named_function(:b)
# => {:b, 2}

Example.named_function(:c)
# => ** (FunctionClauseError) no function clause matching in Example.named_function/1

Utasítások

Amikor épp sütiket készülsz sütni a barátaidnak, rájössz, hogy a receptben szereplő mérések egy részét át kell váltanod. Mivel csak a metrikus rendszert ismered, ki kell találnod egy módot arra, hogy a gyakori amerikai konyhai mértékegységeket milliliterre (mL) váltsd a saját kényelmed érdekében.

Használd ezt az átváltási táblázatot a megoldásodhoz:

Átváltandó mértékegység térfogat milliliterben (mL)
mL 1 1
amerikai csésze 1 240
amerikai folyadék uncia 1 30
amerikai teáskanál 1 5
amerikai evőkanál 1 15

Mivel tehetséges programozópalánta vagy, úgy döntesz, hogy a millilitert használod átmeneti mértékegységként, hogy megkönnyítsd bármely felsorolt mértékegység átváltását bármely másikra (még önmagára is).

1. Keresd ki a numerikus komponenst egy térfogatpárból

Valósítsd meg a KitchenCalculator.get_volume/1 függvényt. Egy térfogatpár tuple esetén csak a numerikus komponenst adja vissza.

KitchenCalculator.get_volume({:cup, 2.0})
# => 2.0

2. Váltsd át a térfogatpárt milliliterre

Valósítsd meg a KitchenCalculator.to_milliliter/1 függvényt. Egy térfogatpár tuple esetén az átváltási táblázat segítségével milliliterre kell váltania a térfogatot.

Használj több függvényklózt és mintaillesztést az egyes mértékegységekhez tartozó függvények létrehozásához. Az egyes mértékegységeket jelölő atomok: :cup, :fluid_ounce, :teaspoon, :tablespoon, :milliliter. Az átváltás eredményét tuple-be csomagolva add vissza.

KitchenCalculator.to_milliliter({:cup, 2.5})
# => {:milliliter, 600.0}

3. Váltsd át a milliliteres térfogatpárt másik mértékegységre

Valósítsd meg a KitchenCalculator.from_milliliter/2 függvényt. Egy térfogatpár tuple és a kívánt mértékegység esetén az átváltási táblázat segítségével a kívánt mértékegységre kell váltania a térfogatot.

Használj több függvényklózt és mintaillesztést az egyes mértékegységekhez tartozó függvények létrehozásához. Az egyes mértékegységeket jelölő atomok: :cup, :fluid_ounce, :teaspoon, :tablespoon, :milliliter

KitchenCalculator.from_milliliter({:milliliter, 1320.0}, :cup)
# => {:cup, 5.5}

4. Váltsd át bármely mértékegységből bármelyikbe

Valósítsd meg a KitchenCalculator.convert/2 függvényt. Egy térfogatpár tuple és a kívánt mértékegység esetén a megadott térfogatot a kívánt mértékegységre kell váltania.

KitchenCalculator.convert({:teaspoon, 9.0}, :tablespoon)
# => {:tablespoon, 3.0}
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Konyhai számológép 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.