قبو النبيذ

قبو النبيذ

تمرين تعلّمي

مقدمة

الوسائط المُسمّاة

أحيانًا عندما تأخذ دالة وسائط كثيرة، قد يصعب تذكّر الترتيب الذي ينبغي تمريرها به. ولتحسين قابلية القراءة، تسمح Gleam بتسمية الوسائط باسم.

لتسمية وسيط، اكتب اسم التسمية قبل اسم الوسيط، مفصولًا بمسافة.

pub fn replace(
  in string: String,
  each target: String,
  with replacement: String
) -> String {
  // ...
}

عند استدعاء دالة ذات وسائط مُسمّاة، يمكن تمرير الوسائط بأي ترتيب. وكل من هذه الاستدعاءات لـ replace متكافئة:

replace(in: "🍔🍔🍔", each: "🍔", with: "🍕")

replace(each: "🍔", in: "🍔🍔🍔", with: "🍕")

replace(with: "🍕", each: "🍔", in: "🍔🍔🍔")

التسميات اختيارية دائمًا. وحتى لو كانت للدالة وسائط مُسمّاة، فيمكن استدعاؤها بدون تسميات.

replace("🍔🍔🍔", "🍔", "🍕")

التعليمات

أنت مدير مطعم فاخر يمتلك قبو نبيذ واسعًا. كثير من عملائك من عشّاق النبيذ المتطلبين. العثور على زجاجة النبيذ المناسبة لعميل بعينه ليس مهمة سهلة.

وبصفتك صاحب مطعم ملمًّا بالتقنية، قررت تسريع عملية اختيار النبيذ عبر كتابة تطبيق يتيح للضيوف تصفية النبيذ حسب تفضيلاتهم.

1. احصل على كل النبيذ ذي اللون المعيّن

تُمثَّل زجاجة النبيذ بنوع مخصص، ويُخزَّن النبيذ في مصفوفة.

[
  Wine("Chardonnay", 2015, "Italy", White),
  Wine("Pinot grigio", 2017, "Germany", White),
  Wine("Pinot noir", 2016, "France", Red),
  Wine("Dornfelder", 2018, "Germany", Rose)
]

نفّذ الدالة wines_of_color. يجب أن تأخذ مصفوفة من النبيذ وتُرجع كل النبيذ ذي اللون المعيّن.

wines_of_color(
  [
    Wine("Chardonnay", 2015, "Italy", White),
    Wine("Pinot grigio", 2017, "Germany", White),
    Wine("Pinot noir", 2016, "France", Red),
    Wine("Dornfelder", 2018, "Germany", Rose)
  ],
  color: White
)
// -> [
//   Wine("Chardonnay", 2015, "Italy", White),
//   Wine("Pinot grigio", 2017, "Germany", White),
// ]

2. احصل على كل زجاجات النبيذ في بلد معيّن

نفّذ الدالة wines_from_country. يجب أن تأخذ مصفوفة من النبيذ وتُرجع كل النبيذ القادم من بلد معيّن.

wines_from_country(
  [
    Wine("Chardonnay", 2015, "Italy", White),
    Wine("Pinot grigio", 2017, "Germany", White),
    Wine("Pinot noir", 2016, "France", Red),
    Wine("Dornfelder", 2018, "Germany", Rose)
  ],
  country: "Germany"
)
// -> [
//   Wine("Dornfelder", 2018, "Germany", Rose)
// ]

3. احصل على كل النبيذ ذي اللون المعيّن المعبأ في بلد معيّن

نفّذ الدالة filter. يجب أن تأخذ مصفوفة من النبيذ ولونًا وبلدًا، وتُرجع كل النبيذ ذي اللون المعيّن المعبأ في البلد المعيّن.

filter(
  [
    Wine("Chardonnay", 2015, "Italy", White),
    Wine("Pinot grigio", 2017, "Germany", White),
    Wine("Pinot noir", 2016, "France", Red),
    Wine("Dornfelder", 2018, "Germany", Rose)
  ],
  color: White
  country: "Italy"
)
// -> [
//   Wine("Chardonnay", 2015, "Italy", White),
// ]
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Gleam Exercism

مستعد لبدء قبو النبيذ؟

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