في Dart، يمكن تمرير المعاملات إلى الدالة باستخدام المعاملات المسماة (Named Parameters
).
تُستخدم {}
حول المعاملات لجعلها اختيارية أو إجبارية عند استدعاء الدالة.
🔹 1. تعريف المعاملات المسماة
📌 الصيغة العامة:
returnType functionName({Type param1, Type param2}) {
// كود الدالة
}
Dart🔹 يتم تحديد المعاملات داخل {}
عند تعريف الدالة، مما يسمح بتمرير القيم عند الاستدعاء بترتيب عشوائي.
🔹 2. معامل مسمى اختياري (Optional Named Parameter)
🔹 عند استخدام {}
فقط، يصبح المعامل اختياريًا وإذا لم يتم تمريره، ستكون قيمته null
افتراضيًا.
✨ مثال 1: دالة تطبع بيانات المستخدم
void printUserInfo({String? name, int? age}) {
print('الاسم: $name');
print('العمر: $age');
}
void main() {
printUserInfo(name: 'Ali', age: 25); // تمرير كل القيم
printUserInfo(name: 'Sara'); // تمرير الاسم فقط
printUserInfo(); // عدم تمرير أي قيمة
}
Dart🔹 الناتج:
الاسم: Ali
العمر: 25
الاسم: Sara
العمر: null
الاسم: null
العمر: null
Dart📌 المعاملات تكون null
إذا لم يتم تمريرها!
🔹 3. تعيين قيم افتراضية للمعاملات
🔹 يمكنك تجنب null
من خلال تحديد قيمة افتراضية عند تعريف المعامل.
✨ مثال 2: تعيين قيم افتراضية
void printUserInfo({String name = 'غير معروف', int age = 18}) {
print('الاسم: $name');
print('العمر: $age');
}
void main() {
printUserInfo(name: 'Ali', age: 25); // إدخال جميع القيم
printUserInfo(name: 'Sara'); // إدخال الاسم فقط
printUserInfo(); // عدم تمرير أي قيمة
}
Dart🔹 الناتج:
الاسم: Ali
العمر: 25
الاسم: Sara
العمر: 18
الاسم: غير معروف
العمر: 18
Dart📌 إذا لم يتم تمرير قيمة، يتم استخدام القيم الافتراضية.
🔹 4. استخدام required
لجعل المعامل إلزاميًا
🔹 عند إضافة required
، يصبح تمرير المعامل إجباريًا وإلا سيظهر خطأ أثناء التشغيل.
✨ مثال 3: دالة بمعاملات إلزامية (required
)
void printUserInfo({required String name, required int age}) {
print('الاسم: $name');
print('العمر: $age');
}
void main() {
printUserInfo(name: 'Ali', age: 25); // ✅ صحيح
// printUserInfo(name: 'Sara'); ❌ خطأ - العمر مطلوب
}
Dart🔹 إذا لم يتم تمرير age
، سيظهر خطأ عند التنفيذ.
🔹 5. دمج required
مع القيم الافتراضية
🔹 يمكنك جعل بعض المعاملات إجبارية وبعضها اختياري مع قيمة افتراضية.
✨ مثال 4: مزيج بين required
و القيم الافتراضية
void printUserInfo({required String name, int age = 18}) {
print('الاسم: $name');
print('العمر: $age');
}
void main() {
printUserInfo(name: 'Ali', age: 25); // ✅ صحيح
printUserInfo(name: 'Sara'); // ✅ صحيح، العمر يأخذ 18 افتراضيًا
// printUserInfo(); ❌ خطأ - name مطلوب
}
Dart🔹 name
إلزامي، لكن age
يحتوي على قيمة افتراضية 18.
🔹 6. تمرير معاملات بترتيب مختلف
📌 ميزة Named Parameters
هي أنه يمكن تمرير القيم بأي ترتيب دون القلق بشأن ترتيب التعريف في الدالة.
✨ مثال 5: تمرير القيم بأي ترتيب
void displayInfo({required String name, required String city, int age = 18}) {
print('الاسم: $name');
print('المدينة: $city');
print('العمر: $age');
}
void main() {
displayInfo(name: 'Ali', city: 'Cairo'); // ✅ العمر سيأخذ القيمة الافتراضية
displayInfo(city: 'Dubai', name: 'Sara'); // ✅ تمرير القيم بترتيب مختلف
}
Dart🔹 الناتج:
الاسم: Ali
المدينة: Cairo
العمر: 18
الاسم: Sara
المدينة: Dubai
العمر: 18
Dart🔹 الخلاصة
✅ Named Parameters
تجعل الكود أكثر وضوحًا ومرونة عند استدعاء الدالة.
✅ يمكن جعل المعاملات اختيارية باستخدام {}
، أو إجبارية باستخدام required
.
✅ يمكن تحديد قيم افتراضية للمعاملات لمنع null
.
✅ يمكن تمرير القيم بأي ترتيب دون الحاجة إلى اتباع ترتيب تعريفها في الدالة.
💡 هل لديك أي استفسارات أو تحتاج إلى مزيد من الأمثلة؟ 😃🚀