Ця вправа навчить нас базових складників мови Ruby. Тут буде багато матеріалу, але не варто хвилюватися, якщо щось видасться надто складним: ми розглянемо все набагато глибше в міру просування треком.
Одна з ключових речей, які варто зрозуміти про Ruby, полягає в тому, що це обʼєктно-орієнтована мова і що усе в Ruby є обʼєктом. Числа, рядки тексту (англ. string), масиви, усе це обʼєкти.
Ми зазвичай користуємося обʼєктами, даючи їм імена за допомогою змінних або констант.
Змінні завжди записують у зміїному регістрі.
Змінна протягом свого існування може посилатися на різні обʼєкти.
Наприклад, my_first_variable можна визначати й перевизначати багато разів за допомогою оператора =:
my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new
Константи ж передбачають лише одне присвоєння. Вони мають починатися з великої літери й зазвичай пишуться великими літерами, а слова розділяються підкресленнями. Наприклад:
MY_FIRST_CONSTANT = 10
# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"
Ruby організовано в класи.
Класи визначають за допомогою ключового слова class, після якого йде назва класу.
Обʼєкти зазвичай створюють шляхом побудови примірників класів за допомогою методу .new.
Наприклад:
# Define the class
class Calculator
#...
end
# Create an instance of it and assign it to a variable
my_first_calc = Calculator.new
Одиниці функціональності інкапсульовані в методах, подібно до функцій в інших мовах.
Метод можна визначити з позиційними аргументами, ключовими аргументами (які визначають і викликають за допомогою синтаксису :) або взагалі без аргументів.
Методи або неявно повертають результат останньої виконаної інструкції, або можуть явно повернути обʼєкт за допомогою ключового слова return.
class Calculator
# Positional arguments
def add(num1, num2)
return num1 + num2 # Explicit return
end
# Keyword arguments
def multiply(num1:, num2:)
num1 * num2 # Implicit return
end
end
Методи викликають за допомогою синтаксису .:
calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)
У цій вправі ми напишемо трохи коду, який допоможе приготувати чудову лазанью за улюбленою кулінарною книгою.
На нас чекають чотири завдання, усі повʼязані з часом, витраченим на приготування лазаньї.
Визначте константу Lasagna::EXPECTED_MINUTES_IN_OVEN, яка повертає, скільки хвилин лазанья має перебувати в духовці. Згідно з кулінарною книгою, очікуваний час у духовці становить 40 хвилин:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Визначте метод Lasagna#remaining_minutes_in_oven, який приймає як параметр фактичну кількість хвилин, яку лазанья вже перебуває в духовці, і повертає, скільки хвилин лазаньї ще залишилося перебувати в духовці, виходячи з очікуваного часу перебування в духовці в хвилинах із попереднього завдання.
lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10
Визначте метод Lasagna#preparation_time_in_minutes, який приймає як параметр кількість шарів, які ми додали до лазаньї, і повертає, скільки хвилин ми витратили на підготовку лазаньї, за умови, що на кожен шар іде 2 хвилини.
lasagna = Lasagna.new
lasagna.preparation_time_in_minutes(2)
# => 4
Визначте метод Lasagna#total_time_in_minutes, який приймає два іменовані параметри: параметр number_of_layers - це кількість шарів, які ми додали до лазаньї, а параметр actual_minutes_in_oven - це кількість хвилин, яку лазанья перебуває в духовці. Функція має повернути, скільки хвилин загалом ми витратили на приготування лазаньї, тобто суму часу підготовки в хвилинах і часу в хвилинах, який лазанья на цей момент провела в духовці.
lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.