Kurzusok
/
Crystal
Crystal
/
Feladatok
/
Ary csodálatos lasagnája
Ary csodálatos lasagnája

Ary csodálatos lasagnája

Tanulófeladat

Bevezetés

Első lépések

Változók

Egy változó deklarálásához használd a = értékadó operátort. A Crystalban a változók neve snake_case formátumú legyen.

number = 1
puts number # => 1

number = 2
puts number # => 2

Konstansok

A konstansokat ugyanazzal a = értékadó operátorral deklaráljuk, de a nevük csupa nagybetű, amit SCREAMING_SNAKE_CASE-nek hívunk.

NUMBER = 1
puts NUMBER # => 1

Ha egy már definiált konstansnak adunk értéket, az fordítási idejű hibát eredményez.

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

Típusok

A Crystal egy fordított nyelv, ami azt jelenti, hogy minden változó és metódusargumentum típusa fordítási időben dől el. A fordító képes kikövetkeztetni egy változó vagy metódusargumentum típusát. Bizonyos esetekben azonban szükség van a típus megadására. Azokat az eseteket, amelyekben meg kell adni a típust, a későbbi fogalmakban mutatjuk be.

Metódusok

A metódusok segítségével utasítások egy csoportját foghatjuk össze, hogy újra felhasználhassuk őket. A Crystalban a metódusokat általában osztályon, modulon vagy struktúrán belül definiáljuk. A metódusokat azonban osztályon, modulon vagy struktúrán kívül is definiálhatjuk. A metódusokat a def kulcsszóval deklaráljuk, amit a metódus neve követ. A Crystalban a metódusok nevét snake_case formátumban érdemes írni. Ha egy metódusnak nincsenek argumentumai, a zárójeleket elhagyhatod. A metódus végét az end kulcsszóval jelölöd.

def hello
  puts "Hello World!"
end

Ha olyan metódust használsz, amely nem létezik a változó vagy a metódusargumentum típusához, az fordítási idejű hibát eredményez.

number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String

Argumentumok

A metódusoknak lehetnek argumentumai. Az argumentumok olyan adatok, amelyeket átadunk egy metódusnak. Ahhoz, hogy egy metódusnak argumentumot adhass, meg kell adnod az argumentum nevét. A Crystalban az argumentumok nevét snake_case formátumban érdemes írni. Egy metódusnak több argumentuma is lehet, de az argumentumokat vesszővel kell elválasztani.

def hello(name)
  puts "Hello #{name}!"
end

A metódusoknak több argumentumuk is lehet. Ebben az esetben az argumentumokat vesszővel kell elválasztani.

def hello(name, language)
  puts "Hello #{name}! You are learning #{language}."
end

Metódusok hívása

Amikor egy osztályhoz, modulhoz vagy struktúrához tartozó metódust hívsz meg, a pont operátort (.) kell használnod. A formátum: <ClassName>.<method_name>. Ha egy metódus nem tartozik osztályhoz, modulhoz vagy struktúrához, egyszerűen a nevének leírásával meghívhatod. A metódusok mindig implicit módon visszaadják az utolsó kifejezés értékét.

Ha egy metódusnak vannak argumentumai, a metódus hívásakor és definiálásakor zárójeleket használhatsz az argumentumok megadásához, például így: <method_name>(<argument_1>, <argument_2>, ...). Ha egy metódusnak nincsenek argumentumai, a zárójeleket hagyd el.

def hello(name)
  "Hello #{name}!"
end

hello("Crystal")
# => Hello Crystal!

Amikor több argumentummal hívsz meg egy metódust, az argumentumokat vesszővel válaszd el. Az argumentumokat ugyanabban a sorrendben kell megadni, mint a metódus argumentumait.

def hello_language(name, language)
  "Hello #{name}! You are learning #{language}."
end

hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.

Ha egy metódust rossz számú argumentummal hívsz meg, az fordítási idejű hibát eredményez.

hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)

Összeadás, kivonás és szorzás

A Crystalban a + operátorral két számot adhatsz össze. A - operátorral két számot vonhatsz ki. A * operátorral pedig két számot szorozhatsz össze.

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

Megjegyzések

A Crystalban a megjegyzéseket a # karakterrel írjuk, amit egy szóköz, majd maga a megjegyzés követ. A megjegyzéseket a kód dokumentálására használjuk. A fordító nem hajtja végre a megjegyzéseket.

# This is a comment

Utasítások

Ebben a feladatban kódot írsz, hogy segítségével egy remek lasagnát készíthess a kedvenc szakácskönyvedből.

Négy 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 sütőben töltendő várható időt percben

Definiáld az EXPECTED_MINUTES_IN_OVEN konstanst a Lasagna osztályban, amely azt tárolja, hány percig kell a lasagnának a sütőben lennie. A szakácskönyv szerint a sütőben töltendő várható 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 metódust, amely paraméterként megkapja, hogy a lasagna hány perce van a sütőben, és visszaadja, hány percig kell még a sütőben maradnia, az előző részfeladatban megadott várható sütési idő alapján.

Lasagna.new.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 metódust, amely paraméterként megkapja a lasagnára tett rétegek számát, és visszaadja, hány percet töltöttél az előkészítésével, feltéve hogy minden réteg elkészítése 2 percet vesz igénybe.

Lasagna.new.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 metódust, amely két nevesített paramétert kap: a number_of_layers paraméter a lasagnára tett rétegek száma, az actual_minutes_in_oven paraméter pedig az, hogy a lasagna hány perce van a sütőben. A metódus adja vissza a lasagna elkészítésével töltött összes perc számát, ami az előkészítési idő és a lasagnának a sütőben eddig eltöltött idejének összege.

number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Crystal Exercism

Készen állsz elkezdeni a(z) Ary csodálatos lasagnája feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Crystal nyelvet 26 fogalom142 feladat segítségével, valódi emberi mentorálással, mindez ingyen.