عيد الحب

عيد الحب

تمرين تعلّمي

مقدمة

الأنواع المخصصة

الأنواع المخصصة هي الطريقة التي تُعرَّف بها أنواع البيانات الجديدة في Gleam. يمكن أن تحتوي على عدة حالات، لكل منها اسمه الخاص.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

يمكن لكل حالة من حالات النوع المخصص أن تحمل بعض البيانات اختياريًا، ويمكن أن تحتوي الحالات المختلفة على أنواع مختلفة من البيانات. عندما تحمل الحالة بيانات، فإنها تسمى سجلًا.

pub type Number {
  SomeInt(Int)
  SomeFloat(Float)
  Invalid
}

يمكن إنشاء قيمة لحالة محددة بالإشارة إلى اسمها إذا لم تكن تحتوي على بيانات إضافية (Spring)، أو باستدعائها كدالة إذا كانت تحتوي عليها (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

الأنواع المخصصة، مثل كل شيء في Gleam، لديها تساوٍ بنيوي، ما يعني أن قيمتين من الحالة نفسها وبالبيانات نفسها متكافئتان.

Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False

يمكن إجراء مطابقة الأنماط على حالات الأنواع المخصصة باستخدام تعبيرات case.

import gleam/int
import gleam/float

pub fn describe(flexible_number: Number) -> String {
  case flexible_number {
    SomeFloat(f) -> "Float: " <> float.to_string(f)
    SomeInt(i) -> "Int: " <> int.to_string(i)
    Invalid -> "Neither a float nor an int"
  }
}

التعليمات

في هذا التمرين، إنه عيد الحب، وأنت وشريكك تخططان للقيام بشيء لطيف معًا. لدى شريكك الكثير من الأفكار، وهو الآن يطلب منك تقييم الأفكار، لإيجاد النشاط الذي ستمارسانِه.

الأفكار التالية مقترحة من شريكك:

  • لعب لعبة لوحية
  • الاسترخاء
  • مشاهدة فيلم
  • الذهاب إلى مطعم
  • المشي

لديك ست مهام تساعدك على اختيار نشاط عيد الحب.

1. عرّف الموافقة

لكل فكرة يقترحها شريكك، تردّ بأحد ثلاثة خيارات: نعم أو لا أو ربما.

عرّف النوع المخصص Approval لتمثيل هذه الخيارات بالحالات الثلاث التالية: Yes وNo وMaybe.

2. عرّف المطابخ

اختار شريكك مطعمين محتملين: أحدهما مطبخه كوري والآخر مطبخه تركي.

عرّف النوع المخصص Cuisine لتمثيل هذين المطبخين بالحالتين التاليتين: Korean وTurkish.

3. عرّف أنواع الأفلام

هناك عدد هائل من الأفلام للاختيار منها، ولتضييق الخيارات، يذكر شريكك أيضًا تصنيفها الفني.

عرّف النوع المخصص Genre لتمثيل الأنواع الفنية التالية كحالات: Crime وHorror وRomance وThriller.

4. عرّف النشاط

كما قلنا، اقترح شريكك خمسة أنشطة مختلفة: لعب لعبة لوحية، والاسترخاء، ومشاهدة فيلم، والذهاب إلى مطعم، والمشي.

عرّف النوع المخصص Activity لتمثيل أنواع الأنشطة هذه:

  • BoardGame: لا توجد بيانات مرتبطة.
  • Chill: لا توجد بيانات مرتبطة.
  • Movie: لديه Genre كبيانات مرتبطة.
  • Restaurant: لديه Cuisine كبيانات مرتبطة.
  • Walk: لديه Int يمثّل عدد الكيلومترات التي سيتم مشيها كبيانات مرتبطة.

5. قيّم النشاط

أخيرًا، أصبحت مستعدًا لتقييم أفكار شريكك. هكذا تشعر تجاه فكرة شريكك:

  • لعب لعبة لوحية: لا.
  • الاسترخاء: لا.
  • مشاهدة فيلم: نعم إذا كان فيلمًا رومانسيًا، وإلا فلا.
  • الذهاب إلى مطعم: نعم إذا كان المطبخ كوريًا، وربما إذا كان تركيًا.
  • المشي: نعم إذا كانت المسافة أكثر من أحد عشر كيلومترًا، وربما إذا كانت أكثر من ستة كيلومترات، وإلا فلا.

نفّذ دالة باسم rate_activity تأخذ قيمة Activity وتُرجع Approval بناءً على المشاعر المذكورة أعلاه:

rate_activity(Restaurant(Turkish))
// -> Maybe
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Gleam Exercism

مستعد لبدء عيد الحب؟

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