Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الدوال المجهولة

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 44 من 65.

حتى الآن، كنت تقوم بإنشاء دوال بأسماء مثل calculateTotal أو printMessage. ولكن في بعض الأحيان تحتاج إلى دالة بسيطة لمهمة محددة واحدة فقط، ويشعر إعطاؤها اسماً بأنه غير ضروري. هنا تبرز فائدة الدوال المجهولة (anonymous functions).

الدالة المجهولة (anonymous function) هي دالة بدون اسم. تقوم بتعريفها في المكان الذي تحتاجها فيه تماماً، مما يجعل كودك أكثر إيجازاً للعمليات القصيرة التي تُنفذ لمرة واحدة. بنية الكتابة (syntax) بسيطة - ما عليك سوى كتابة قائمة المعاملات متبوعة بجسم الدالة:

(parameter) {
  // جسم الدالة
}

تُعد الدوال المجهولة (Anonymous functions) مفيدة بشكل خاص مع دوال القوائم (list methods). على سبيل المثال، بدلاً من إنشاء دالة منفصلة ومسماة لطباعة كل عنصر في القائمة، يمكنك استخدام دالة مجهولة مباشرة مع دالة forEach:

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print(fruit);
});

هذا النهج يحافظ على نظافة وتركيز الكود الخاص بك، خاصة عندما يكون منطق الدالة بسيطاً ولن يتم إعادة استخدامه في مكان آخر في برنامجك.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يعالج قائمة بأسماء الموظفين باستخدام الدوال المجهولة (anonymous functions). سيقوم برنامجك بتوضيح كيفية استخدام الدوال المجهولة مع التابع forEach لإجراء عمليات مختلفة على كل عنصر من عناصر القائمة.

  1. اقرأ مدخلاً نصياً يحتوي على أسماء الموظفين مفصولة بفاصلة (على سبيل المثال، "Alice,Bob,Charlie,Diana")
  2. قم بتقسيم نص المدخلات إلى قائمة من الأسماء الفردية باستخدام التابع split()
  3. استخدم التابع forEach مع دالة مجهولة لطباعة اسم كل موظف مع رسالة ترحيب
  4. استخدم التابع forEach مع دالة مجهولة أخرى لطباعة اسم كل موظف بالأحرف الكبيرة (uppercase)
  5. استخدم التابع forEach مع دالة مجهولة ثالثة لطباعة اسم كل موظف مع عدد أحرفه

على سبيل المثال، إذا كان المدخل هو "Alice,Bob,Charlie"، يجب أن يقوم برنامجك بإخراج ما يلي:

Processing employee list: Alice,Bob,Charlie
===========================================
Welcome Messages:
Welcome to the team, Alice!
Welcome to the team, Bob!
Welcome to the team, Charlie!
===========================================
Names in Uppercase:
ALICE
BOB
CHARLIE
===========================================
Name Lengths:
Alice has 5 characters
Bob has 3 characters
Charlie has 7 characters

إذا كان المدخل هو "John,Sarah"، يجب أن يقوم برنامجك بإخراج ما يلي:

Processing employee list: John,Sarah
===========================================
Welcome Messages:
Welcome to the team, John!
Welcome to the team, Sarah!
===========================================
Names in Uppercase:
JOHN
SARAH
===========================================
Name Lengths:
John has 4 characters
Sarah has 5 characters

يجب أن يستخدم برنامجك ثلاث استدعاءات منفصلة للتابع forEach، كل منها بدالة مجهولة خاصة بها. يجب تعريف الدوال المجهولة بشكل مضمن (inline) دون تسميتها. يجب أن تأخذ كل دالة مجهولة معاملاً واحداً يمثل اسم الموظف الحالي وتؤدي العملية المحددة. استخدم استيفاء النصوص (string interpolation) لتنسيق رسائل المخرجات تماماً كما هو موضح أعلاه.

ورقة مرجعية

الدالة المجهولة (anonymous function) هي دالة بدون اسم، يتم تعريفها في المكان الذي تحتاجها فيه تماماً. يستخدم بناء الجملة قائمة المعلمات متبوعة بجسم الدالة:

(parameter) {
  // جسم الدالة
}

الدوال المجهولة مفيدة بشكل خاص مع طرق القوائم (list methods) مثل forEach:

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print(fruit);
});

يحافظ هذا النهج على نظافة الكود وتركيزه للعمليات البسيطة التي تُنفذ لمرة واحدة ولن يتم إعادة استخدامها في مكان آخر.

جرّب بنفسك

import 'dart:io';

void main() {
  // قراءة سلسلة الإدخال التي تحتوي على أسماء الموظفين
  String? input = stdin.readLineSync();
  
  // تقسيم الإدخال إلى قائمة من الأسماء
  List<String> employeeNames = input!.split(',');
  
  // طباعة رسالة المعالجة الأولية
  print('Processing employee list: $input');
  print('===========================================');
  
  // TODO: اكتب الكود الخاص بك أدناه
  // استخدم forEach مع دوال مجهولة لـ:
  // 1. طباعة رسائل الترحيب
  // 2. طباعة الأسماء بأحرف كبيرة  
  // 3. طباعة أطوال الأسماء
  
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow