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
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
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.
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
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
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)
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
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
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.
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
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
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
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
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.