اللازانيا

اللازانيا

تمرين تعلّمي

مقدمة

سيعلّمك هذا التمرين اللبنات الأساسية للغة Ruby. يتناول الكثير من الموضوعات، لكن لا تقلق إن بدا الأمر مربكًا، فسنخوض في كل شيء بعمق أكبر بكثير مع تقدّمنا في المسار.

من الأمور الأساسية التي يجب فهمها عن Ruby أنها لغة كائنية التوجه، وأن كل شيء في Ruby هو كائن. الأعداد والسلاسل النصية والمصفوفات، كلها كائنات.

المتغيرات والثوابت

نميل إلى استخدام الكائنات عبر إسناد أسماء إليها، إما باستخدام المتغيرات أو الثوابت.

تُكتب المتغيرات دائمًا بأسلوب حالة الثعبان. يمكن للمتغير أن يشير إلى كائنات مختلفة على مدار عمره. على سبيل المثال، يمكن تعريف 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)

التعليمات

في هذا التمرين ستكتب بعض الكود لمساعدتك على طهي لازانيا رائعة من كتاب الطهي المفضل لديك.

لديك أربع مهام، وكلها تتعلق بالوقت الذي تقضيه في طهي اللازانيا.

1. عرّف زمن الفرن المتوقع بالدقائق

عرّف الثابت Lasagna::EXPECTED_MINUTES_IN_OVEN الذي يُرجع عدد الدقائق التي ينبغي أن تبقى فيها اللازانيا في الفرن. وفقًا لكتاب الطهي، زمن الفرن المتوقع بالدقائق هو 40:

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. احسب زمن الفرن المتبقي بالدقائق

عرّف الطريقة Lasagna#remaining_minutes_in_oven التي تأخذ كمعامل الدقائق الفعلية التي قضتها اللازانيا في الفرن، وتُرجع عدد الدقائق التي يجب أن تبقى فيها اللازانيا في الفرن، بناءً على زمن الفرن المتوقع بالدقائق من المهمة السابقة.

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

3. احسب زمن التحضير بالدقائق

عرّف الطريقة Lasagna#preparation_time_in_minutes التي تأخذ كمعامل عدد الطبقات التي أضفتها إلى اللازانيا، وتُرجع عدد الدقائق التي قضيتها في تحضير اللازانيا، بافتراض أن إعداد كل طبقة يستغرق دقيقتين.

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

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
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Ruby Exercism

مستعد لبدء اللازانيا؟

سجّل في Exercism لتتعلّم وتتقن Ruby عبر 21 مفهومًا121 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.