Треки
/
Crystal
Crystal
/
Вправи
/
Дивовижна лазанья Арі
Дивовижна лазанья Арі

Дивовижна лазанья Арі

Навчальна вправа

Вступ

Початок роботи

Змінні

Щоб оголосити змінну, використовуймо оператор присвоєння =. У 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

Вказівки

У цій вправі ми напишемо код, який допоможе приготувати чудову лазанью з улюбленої книги рецептів.

На нас чекають чотири завдання, і всі вони повʼязані з часом, витраченим на приготування лазаньї.

1. Визначте очікуваний час запікання в хвилинах

Визначте константу EXPECTED_MINUTES_IN_OVEN у класі Lasagna, яка зберігає кількість хвилин, яку лазанья має провести в печі. Згідно з книгою рецептів, очікуваний час запікання становить 40 хвилин:

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. Обчисліть решту часу запікання в хвилинах

Визначте метод Lasagna#remaining_minutes_in_oven, який приймає як параметр фактичну кількість хвилин, яку лазанья вже провела в печі, і повертає кількість хвилин, які лазаньї ще потрібно там провести, виходячи з очікуваного часу запікання з попереднього завдання.

Lasagna.new.remaining_minutes_in_oven(30)
# => 10

3. Обчисліть час на підготовку в хвилинах

Визначте метод Lasagna#preparation_time_in_minutes, який приймає як параметр кількість шарів, доданих до лазаньї, і повертає кількість хвилин, витрачених на її підготовку, вважаючи, що на підготовку кожного шару потрібно 2 хвилини.

Lasagna.new.preparation_time_in_minutes(2)
# => 4

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
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Crystal Exercism

Час розпочати Дивовижна лазанья Арі?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Crystal, а також 26 концепцій142 вправи та справжнє наставництво від людей, і все це безкоштовно.