المسارات
/
Go
Go
/
التمارين
/
لازانيا Gopher الرائعة
لازانيا Gopher الرائعة

لازانيا Gopher الرائعة

تمرين تعلّمي

مقدمة

Go لغة برمجة ثابتة الأنواع ومُصرَّفة. يقدّم هذا التمرين ثلاث ميزات رئيسية في اللغة: الحزم، والدوال، والمتغيرات.

الحزم

تُنظَّم تطبيقات Go في حزم. والحزمة مجموعة من الملفات المصدرية الموجودة في المجلد نفسه. ويجب أن تشترك كل الملفات المصدرية في المجلد في اسم الحزمة نفسه. وعند استيراد حزمة، لا يمكن استخدام أو الوصول إلا إلى الكيانات (الدوال والأنواع والمتغيرات والثوابت) التي تبدأ أسماؤها بحرف كبير. والأسلوب الموصى به للتسمية في Go هو تسمية المُعرِّفات باستخدام camelCase، باستثناء تلك التي يُقصد بها أن تكون متاحة عبر الحزم المختلفة، فهذه ينبغي أن تكون PascalCase.

package lasagna

المتغيرات

لغة Go ثابتة الأنواع، وهذا يعني أن كل المتغيرات يجب أن يكون لها نوع محدَّد وقت التصريف.

يمكن تعريف المتغيرات بتحديد النوع صراحةً:

var explicit int // Explicitly typed

يمكنك أيضًا استخدام مُهيِّئ، وسيُسنِد المُصرِّف نوع المتغير ليطابق نوع المُهيِّئ.

implicit := 10   // Implicitly typed as an int

بعد الإعلان عن المتغيرات، يمكن إسناد قيم إليها باستخدام العامل =. وبعد الإعلان عن المتغير، لا يمكن أن يتغير نوعه أبدًا.

count := 1 // Assign initial value
count = 2  // Update to new value

count = false // This throws a compiler error due to assigning a non `int` type

الثوابت

تحمل الثوابت قطعة من البيانات تمامًا كالمتغيرات، لكن قيمتها لا يمكن أن تتغير أثناء تنفيذ البرنامج.

تُعرَّف الثوابت باستخدام الكلمة المفتاحية const، ويمكن أن تكون أعدادًا أو محارف أو سلاسل نصية أو قيمًا منطقية:

const Age = 21 // Defines a numeric constant 'Age' with the value of 21

الدوال

تقبل دوال Go صفرًا أو أكثر من المعاملات. ويجب تحديد نوع المعاملات صراحةً، فلا يوجد استنتاج للنوع.

وتُرجع الدوال القيم باستخدام الكلمة المفتاحية return.

ويُستدعى الدالة بتحديد اسم الدالة وتمرير وسائط لكل معامل من معاملات الدالة.

لاحظ أن Go تدعم نوعين من التعليقات. تسبق التعليقات أحادية السطر ب//، أما التعليقات متعددة الأسطر فتوضع بين /* و */.

package greeting

// Hello is a public function.
func Hello (name string) string {
    return hi(name)
}

// hi is a private function.
func hi (name string) string {
    return "hi " + name
}

التعليمات

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

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

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

عرّف الثابت OvenTime بعدد الدقائق التي ينبغي أن تبقى فيها اللازانيا في الفرن. وفقًا لكتاب الطبخ، فإن زمن الفرن المتوقع بالدقائق هو 40:

OvenTime
// => 40

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

عرّف الدالة RemainingOvenTime() التي تأخذ عدد الدقائق الفعلية التي قضتها اللازانيا في الفرن كمعامل، وتُرجع عدد الدقائق التي يجب أن تبقى فيها اللازانيا في الفرن، استنادًا إلى زمن الفرن المتوقع بالدقائق من المهمة السابقة.

func RemainingOvenTime(actual int) int {
    // TODO
}

RemainingOvenTime(30)
// => 10

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

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

func PreparationTime(numberOfLayers int) int {
    // TODO
}

PreparationTime(2)
// => 4

4. احسب زمن العمل المنقضي بالدقائق

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

func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
    // TODO
}

ElapsedTime(3, 20)
// => 26
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Go Exercism

مستعد لبدء لازانيا Gopher الرائعة؟

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