Lasagne

Lasagne

Tanulófeladat

Bevezetés

Alapok

Változók

Az Elixir dinamikusan típusos nyelv, ami azt jelenti, hogy egy változó típusát csak futásidőben ellenőrzi. Az egyeztető = operátorral bármilyen típusú értéket hozzáköthetünk egy változónévhez:

# Bound an integer value of 1
count = 1
# You may re-bind variables
count = 2

# You may re-bind any type to a variable
count = false

# Strings can be created by enclosing characters within double quotes
message = "Success!"

Modulok

Az Elixir egy funkcionális programozási nyelv, és minden nevesített függvényt egy modulban kell definiálni. A defmodule kulcsszóval definiálunk modult. Minden modul elérhető futásidőben az összes többi modul számára, és nincs szükség hozzáférési módosítóra, hogy a program más részei számára láthatóvá váljanak. A modul más programozási nyelvek osztályához hasonló.

defmodule Calculator do
  # ...
end

Nevesített függvények

A nevesített függvényeket modulban kell definiálni. A def kulcsszóval definiálunk egy nyilvános nevesített függvényt.

Minden függvénynek lehet nulla vagy több argumentuma. Egy függvény utolsó kifejezésének értéke mindig implicit módon visszaadódik.

defmodule Calculator do
  def add(x, y) do
    x + y
  end
end

Egy függvény meghívásához meg kell adni a modulját és a függvénynevét, majd minden argumentumához át kell adni egy értéket.

sum = Calculator.add(1, 2)
# => 3

A defp kulcsszó a def helyett használható privát függvény definiálására. A privát függvényeket csak ugyanazon a modulon belül lehet használni, amely definiálta őket.

Ha egy függvényt ugyanabban a modulban hívunk meg, amelyben definiálták, a modul nevét elhagyhatjuk.

Rövid függvényeket egysoros szintaxissal is írhatsz (figyeld meg a do kulcsszó körüli vesszőt , és kettőspontot :).

defmodule Calculator do
  def subtract(x, y) do
    private_subtract(x, y)
  end

  defp private_subtract(x, y), do: x - y
end

difference = Calculator.subtract(7, 2)
# => 5

difference = Calculator.private_subtract(7, 2)
# => ** (UndefinedFunctionError) function Calculator.private_subtract/2 is undefined or private
#       Calculator.private_subtract(7, 2)

Függvények aritása

Gyakori, hogy a függvényekre az aritásukkal hivatkozunk. Egy függvény aritása az általa elfogadott argumentumok száma.

# add/3 because this function has three arguments, thus an arity of 3
def add(x, y, z) do
  x + y + z
end

Elnevezési konvenciók

A modulneveknél PascalCase-t használjunk. Egy modulnévnek nagybetűvel A-Z kell kezdődnie, és tartalmazhat betűket a-zA-Z, számokat 0-9 és aláhúzásjeleket _.

A változó- és függvényneveknél snake_case-t használjunk. Egy változó- vagy függvénynévnek kisbetűvel a-z vagy aláhúzásjellel _ kell kezdődnie, tartalmazhat betűket a-zA-Z, számokat 0-9 és aláhúzásjeleket _, és végződhet kérdőjelre ? vagy felkiáltójelre !.

Szabványos könyvtár

Az Elixirnek nagyon gazdag és jól dokumentált szabványos könyvtára van. A dokumentáció online elérhető a hexdocs.pm/elixir címen. Mentsd el valahova ezt a linket, sokat fogod használni!

A legtöbb beépített adattípushoz tartozik egy megfelelő modul, amely függvényeket kínál az adott adattípus kezeléséhez, például az Integer modul az egészekhez, a String modul a stringekhez, a List modul a listákhoz, és így tovább.

Figyelemre méltó a Kernel modul. Ez biztosítja azokat az alapvető képességeket, amelyekre a szabványos könyvtár többi része épül, például aritmetikai operátorok, vezérlési folyam makrói és még sok más. A Kernel modul függvényei automatikusan importálódnak, így a Kernel. előtag nélkül használhatod őket.

Kódkommentek

A kommentekkel megjegyzéseket hagyhatsz a forráskódot olvasó fejlesztőknek. Az egysoros kommenteket Elixirben # előzi meg.

Utasítások

Ebben a feladatban kódot írsz majd, amivel egy remek lasagnét készíthetsz el a kedvenc szakácskönyvedből.

Öt részfeladat vár rád, amelyek mind a lasagna elkészítésével töltött időhöz kapcsolódnak.

1. Határozd meg a várható sütési időt percben

Definiáld a Lasagna.expected_minutes_in_oven/0 függvényt, amely nem vár argumentumot, és visszaadja, hány percig kell a lasagnának a sütőben lennie. A szakácskönyv szerint a várható sütési idő 40 perc:

Lasagna.expected_minutes_in_oven()
# => 40

2. Számítsd ki a hátralévő sütési időt percben

Definiáld a Lasagna.remaining_minutes_in_oven/1 függvényt, amely argumentumként a lasagna tényleges sütőben töltött perceit kapja, és visszaadja, hány percet kell még a sütőben maradnia, az előző részfeladat várható sütési ideje alapján.

Lasagna.remaining_minutes_in_oven(30)
# => 10

3. Számítsd ki az előkészítési időt percben

Definiáld a Lasagna.preparation_time_in_minutes/1 függvényt, amely argumentumként a lasagnához adott rétegek számát kapja, és visszaadja, hány percet töltöttél a lasagna előkészítésével, feltéve, hogy egy réteg előkészítése 2 percet vesz igénybe.

Lasagna.preparation_time_in_minutes(2)
# => 4

4. Számítsd ki a teljes munkával töltött időt percben

Definiáld a Lasagna.total_time_in_minutes/2 függvényt, amely két argumentumot kap: az első argumentum a lasagnához adott rétegek száma, a második pedig az a perc, amennyit a lasagna már a sütőben töltött. A függvény adja vissza, összesen hány percet dolgoztál a lasagna elkészítésén, ami az előkészítési idő és a lasagna által a sütőben eddig eltöltött idő összege.

Lasagna.total_time_in_minutes(3, 20)
# => 26

5. Készíts értesítést arról, hogy a lasagna elkészült

Definiáld a Lasagna.alarm/0 függvényt, amely nem vár argumentumot, és egy üzenetet ad vissza arról, hogy a lasagna fogyasztásra kész.

Lasagna.alarm()
# => "Ding!"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Lasagne 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.