Anonymous Functions – Arrow Functions

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


🔹 1. الدوال المجهولة (Anonymous Functions)

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

📌 الصيغة العامة:

(var parameter) {
  // كود الدالة
};
Dart

✨ مثال 1: استخدام دالة مجهولة مع forEach()

void main() {
  List<String> names = ['Ali', 'Sara', 'Omar'];

  names.forEach((name) {
    print('مرحبًا، $name');
  });
}
Dart

🔹 الناتج:

مرحبًا، Ali
مرحبًا، Sara
مرحبًا، Omar
Dart

📌 ملاحظة:

  • تم تمرير دالة مجهولة إلى forEach().
  • تأخذ الدالة name كمعامل، ثم تطبع رسالة الترحيب.

✨ مثال 2: تخزين دالة مجهولة في متغير

يمكنك تخزين دالة مجهولة داخل متغير واستدعاؤها لاحقًا.

void main() {
  var multiply = (int a, int b) {
    return a * b;
  };

  print(multiply(3, 4)); // 12
}
Dart

🔹 الناتج:

نسختحرير12

📌 ملاحظة:

  • المتغير multiply يخزن دالة مجهولة تقوم بضرب عددين.
  • يمكن استدعاؤها مثل أي دالة عادية باستخدام multiply(3, 4).

✨ مثال 3: تمرير دالة مجهولة كمعامل لدالة أخرى

void execute(Function operation) {
  operation();
}

void main() {
  execute(() {
    print('تم تنفيذ العملية!');
  });
}
Dart

🔹 الناتج:

📌 ملاحظة:

  • يتم تمرير دالة مجهولة إلى execute() عند استدعائها.

🔹 2. الدوال السهمية (Arrow Functions)

الدوال السهمية (Arrow Functions) تُستخدم لاختصار الدوال عند احتوائها على تعليمة واحدة فقط.

📌 الصيغة العامة:

returnType functionName(parameters) => expression;
Dart

🔹 بدلًا من:

dartنسختحريرint add(int a, int b) {
  return a + b;
}

🔹 يمكنك كتابتها هكذا:

dartنسختحريرint add(int a, int b) => a + b;

✨ مثال 1: دالة سهمية لجمع عددين

int sum(int a, int b) => a + b;

void main() {
  print(sum(4, 5)); // 9
}
Dart

🔹 الناتج:

نسختحرير9

📌 ملاحظة:

  • => تعني “ترجع” (return).
  • لا حاجة لكتابة {} أو return عند استخدام تعليمة واحدة فقط.

✨ مثال 2: دالة سهمية بدون معاملات

void main() {
  var greet = () => print('مرحبًا بك!');
  greet();
}
Dart

🔹 الناتج:

📌 ملاحظة:

  • الدالة السهمية يمكن أن تكون بدون معاملات أيضًا.

✨ مثال 3: دالة سهمية تُرجع قيمة منطقية

bool isEven(int number) => number % 2 == 0;

void main() {
  print(isEven(4)); // true
  print(isEven(7)); // false
  
  }
Dart

🔹 الناتج:

true
false
Dart

📌 ملاحظة:

  • يمكن استخدام => مع أي نوع بيانات (int, bool, String, إلخ).

✨ مثال 4: دالة سهمية داخل forEach()

void main() {
  List<int> numbers = [1, 2, 3, 4];

  numbers.forEach((num) => print('الرقم: $num'));
}
Dart

🔹 الناتج:

الرقم: 1
الرقم: 2
الرقم: 3
الرقم: 4
Dart

📌 ملاحظة:

  • الدالة السهمية تختصر الكود وتجعل الكود أكثر وضوحًا.

🔹 الفرق بين Anonymous و Arrow

المقارنةالدوال المجهولة (Anonymous)الدوال السهمية (Arrow)
التعريفدالة بدون اسم تُستخدم مرة واحدة غالبًا.دالة مختصرة بتعبير واحد فقط.
الشكل() {}() =>
استخدام returnيجب كتابتها يدويًا إذا كانت الدالة تُرجع قيمة.return مضمّن تلقائيًا.
عدد التعليماتيمكن أن تحتوي على أكثر من تعليمة.يجب أن تحتوي على تعليمة واحدة فقط.

🔹 متى تستخدم كل نوع؟

استخدم Anonymous Functions عندما تحتاج إلى تعريف دالة سريعة داخل دالة أخرى (مثل forEach).
استخدم Arrow Functions عندما يكون لديك تعليمة واحدة فقط وتريد اختصار الكود.

💡 أي نوع من الدوال تفضّل استخدامه في مشاريعك؟ 🚀🔥

4o