Щоб оголосити змінну, використовуймо оператор присвоєння =.
У Crystal змінні записують у форматі snake_case.
number = 1
puts number # => 1
number = 2
puts number # => 2
Константи оголошують за допомогою того самого оператора присвоєння =, але записують великими літерами, що називається SCREAMING_SNAKE_CASE.
NUMBER = 1
puts NUMBER # => 1
Присвоєння значення вже визначеній константі призведе до помилки часу компіляції.
NUMBER = 1
NUMBER = 2
# Error: already initialized constant NUMBER
Crystal - це компільована мова, тобто кожній змінній або аргументу методу під час компіляції призначається тип. Компілятор здатен виводити тип змінної чи аргументу методу. Однак у деяких випадках тип потрібно вказати явно. Випадки, у яких потрібно вказати тип, буде пояснено в наступних концепціях.
Методи - це спосіб згрупувати набір інструкцій, які можна використовувати повторно.
У Crystal методи часто визначають у класі, модулі чи структурі.
Однак методи можна визначати й поза класом, модулем чи структурою.
Методи оголошують за допомогою ключового слова def, після якого йде назва методу.
У Crystal методи записують у snake_case.
Дужки можна опустити, коли метод не має аргументів.
Щоб позначити кінець методу, потрібно використати ключове слово end.
def hello
puts "Hello World!"
end
Використання методу, якого не існує для типу змінної чи аргументу методу, призведе до помилки часу компіляції.
number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String
Методи можуть мати аргументи. Аргументи - це дані, які передають методу. Щоб мати змогу передати методу аргументи, потрібно вказати назву аргументу. У Crystal аргументи записують у snake_case. Метод може мати кілька аргументів, але їх обовʼязково розділяє кома.
def hello(name)
puts "Hello #{name}!"
end
Метод також може мати кілька аргументів. У цьому випадку аргументи потрібно розділяти комою.
def hello(name, language)
puts "Hello #{name}! You are learning #{language}."
end
Коли викликаємо метод, що належить класу, модулю чи структурі, потрібно використовувати оператор крапки (.).
Формат має бути таким: <ClassName>.<method_name>.
Коли метод не належить класу, модулю чи структурі, його можна просто викликати за назвою.
Методи завжди неявно повертають значення останнього виразу.
Коли метод має аргументи, можна використовувати дужки, вказуючи аргументи під час виклику та визначення методу, ось так: <method_name>(<argument_1>, <argument_2>, ...).
Коли метод не має аргументів, дужки потрібно опускати.
def hello(name)
"Hello #{name}!"
end
hello("Crystal")
# => Hello Crystal!
Коли викликаємо метод із кількома аргументами, аргументи потрібно розділяти комою. Аргументи потрібно наводити в тому самому порядку, що й аргументи методу.
def hello_language(name, language)
"Hello #{name}! You are learning #{language}."
end
hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.
Виклик методу з неправильною кількістю аргументів призведе до помилки часу компіляції.
hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)
У Crystal можна використовувати оператор +, щоб додавати два числа.
Також можна використовувати оператор -, щоб віднімати два числа.
А оператор * дозволяє множити два числа.
1 + 1
# => 2
2 - 1
# => 1
2 * 2
# => 4
У Crystal коментарі записують за допомогою символу #, після якого йде пробіл, а далі сам коментар.
Коментарі використовують для документування коду.
Компілятор не виконує коментарів.
# This is a comment
У цій вправі ми напишемо код, який допоможе приготувати чудову лазанью з улюбленої книги рецептів.
На нас чекають чотири завдання, і всі вони повʼязані з часом, витраченим на приготування лазаньї.
Визначте константу EXPECTED_MINUTES_IN_OVEN у класі Lasagna, яка зберігає кількість хвилин, яку лазанья має провести в печі.
Згідно з книгою рецептів, очікуваний час запікання становить 40 хвилин:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Визначте метод Lasagna#remaining_minutes_in_oven, який приймає як параметр фактичну кількість хвилин, яку лазанья вже провела в печі, і повертає кількість хвилин, які лазаньї ще потрібно там провести, виходячи з очікуваного часу запікання з попереднього завдання.
Lasagna.new.remaining_minutes_in_oven(30)
# => 10
Визначте метод Lasagna#preparation_time_in_minutes, який приймає як параметр кількість шарів, доданих до лазаньї, і повертає кількість хвилин, витрачених на її підготовку, вважаючи, що на підготовку кожного шару потрібно 2 хвилини.
Lasagna.new.preparation_time_in_minutes(2)
# => 4
Визначте метод Lasagna#total_time_in_minutes, який приймає два іменовані параметри: параметр number_of_layers - це кількість шарів, яку ми додали до лазаньї, а параметр actual_minutes_in_oven - це кількість хвилин, яку лазанья вже провела в печі.
Метод має повернути загальну кількість хвилин, витрачених на приготування лазаньї, тобто суму часу на підготовку та часу, який лазанья вже провела в печі на цей момент.
number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
Зареєструйтеся на Exercism, щоб вивчати й опановувати Crystal, а також 26 концепцій142 вправи та справжнє наставництво від людей, і все це безкоштовно.