
المعاملات Parameters في لغة دارت Dart
يعتبر المعامل ( parameter ) على أنه متغير يتم كتابته و إنشاءه عندما نقوم بتعريف دالة Function و يكون الباراميتر جزء من الدالة, أي عندما نقوم بإنشاء دالة جديدة فإن الباراميتر يكون هو المتغير الذي يتم تمريره للدالة من أجل أن يتم التعامل معه و عمل المهمة الخاصة في الدالة.
تعلّمنا في الدرس السابق ما هي الدوال و قلنا أن الدوال هي عبارة عن قطع برمجية منفصِلة عن بعضها البعض و هذا يعني أن كل المتغيرات داخل دالة معيّنة لا يُمكن الوصول إليها في دالة اُخرى و لذلك لنقل القيم من دالة إلى دالة اخرى نقوم بتمرير القيم لكن ما المقصود بالتمرير؟.
يُشار إلى المعاملات بواسطة مصفوفة من الـ Parameters. تتم تعريف المعاملات داخل قوسين مربعين ([]). يمكنك تحديد نوع المعامل واسمه، ويمكن أيضًا تحديد القيمة الافتراضية للمعامل إذا كان ذلك مطلوبًا.
إليك مثال على تعريف دالة تأخذ معاملين في لغة Dart:
void greet(String name, {int age = 30}) { print('مرحبًا $name، عمرك $age سنة.'); }
في المثال أعلاه، تم تعريف دالة تسمى “greet” تأخذ معاملين. المعامل الأول هو “name” من نوع String، ويتم تمرير قيمة له عند استدعاء الدالة. المعامل الثاني هو “age” من نوع int، ولكنه يحتوي على قيمة افتراضية تساوي 30. يمكن تغيير قيمة المعامل الثاني عند استدعاء الدالة، أو يمكن تركه بقيمته الافتراضية.
يمكن استدعاء الدالة “greet” كما يلي:
greet('أحمد'); // ستطبع: مرحبًا أحمد، عمرك 30 سنة. greet('سارة', age: 25); // ستطبع: مرحبًا سارة، عمرك 25 سنة.
في الاستدعاء الأول، تم تمرير قيمة للمعامل الأول فقط، واستخدمت القيمة الافتراضية للمعامل الثاني. أما في الاستدعاء الثاني، تم تمرير قيمة للمعامل الأول وتم تغيير قيمة المعامل الثاني عن قيمته الافتراضية.
هذا مثال بسيط على كيفية استخدام المعاملات في لغة Dart. يمكنك تعريف المزيد من المعاملات واستخدامها في دوالك حسب احتياجاتك.
مثال
void main(List<String> arguments) { printinfo(); sum avrg = sum(6, 6) / 2; print(avrg); } void printinfo() { print("Programmer Tech"); } num sum(num number1, num number2){ return number1+number2; }
أنشأنا دالة printinfo و كان عمل هذه الدالة هي طباعة النص Programmer Tech ثم أنشأنا متغير num و هو sum و به قيمتين هما number1 و number2 و أنشأنا دالة إرجاع ناتج جمع الرقمين, ثم قمنا بإستدعاء الدالة printinfo لكي تطبع ما بداخلها و إستدعينا sum لكي يأتي بنتيجة جمع الباراميترين و قسمتهم على 2.
عند تشغيل الكود السابق سوف تكون نتيجته
Programmer Tech
6.0
كما نلاحظ قام بطبع لنا ما تحمله الدالة الأولى ثم طبع لنا 6.0 وهو ناتج جمع number1 و number2 و قسمتهم على 2.
مثال 2
void main(List<String> arguments) { num avrg = sum(number1: 5, number3: 5, number2: 2) / 2; print(avrg); } num sum({num number1=0, num number2=0, number3=0}){ return number1+number2+number3; }
قمنا بالتعديل في المثال السابق ووضعنا ثلاث باراميترات ووضعنا القيم الإفتراضية 0 ثم عند أمر إستدعائهم مررنا قيم لها مباشرتاً للأول القيمة 5 و الثالث القيمة 5 و الثاني القيمة 2 و قسمناهم على 2 و في حال لم نمرر أي قيم سوف تكون القيم 0.
عند تشغيل الكود السابق سوف تكون نتيجته هي
6.0
لو أننا لم نمرر له أي قيم كما يلي
void main(List<String> arguments) { num avrg = sum() / 2; print(avrg); } num sum({num number1=0, num number2=0, number3=0}){ return number1+number2+number3; }
سوف تكون نتيجته
0.0 .
مثال : دالة لحساب مساحة المستطيل
double calculateRectangleArea(double length, double width) { return length * width; } // استدعاء الدالة double area = calculateRectangleArea(5.0, 3.0); print('مساحة المستطيل هي: $area');
في هذا المثال، تم تعريف دالة “calculateRectangleArea” التي تأخذ معاملين هما طول المستطيل وعرضه. تقوم الدالة بحساب المساحة عن طريق ضرب الطول في العرض وتعيد القيمة المحسوبة. يتم استدعاء الدالة وتخزين النتيجة في المتغير “area”، ثم يتم طباعة النتيجة.
مثال : دالة لطباعة رسالة ترحيبية
void greet(String name, {String language = 'English'}) { if (language == 'Arabic') { print('مرحبًا $name!'); } else { print('Hello $name!'); } } // استدعاء الدالة greet('محمد', language: 'Arabic'); greet('Saja');
في هذا المثال، تم تعريف دالة “greet” التي تأخذ معاملين هما اسم الشخص ولغة التحية. إذا كانت اللغة هي “Arabic”، فإن الدالة ستقوم بطباعة رسالة ترحيبية باللغة العربية، وإلا فستطبع رسالة ترحيبية باللغة الإنجليزية. يتم استدعاء الدالة مرتين، مرة بتحديد اللغة كـ “Arabic” ومرة أخرى دون تحديد اللغة. سيتم طباعة رسائل الترحيب المناسبة بناءً على اللغة المحددة أو اللغة الافتراضية.
مثال : دالة لجمع قائمة من الأعداد
int sumList(List<int> numbers) { int sum = 0; for (int number in numbers) { sum += number; } return sum; } // استدعاء الدالة List<int> numList = [1, 2, 3, 4, 5]; int totalSum = sumList(numList); print('مجموع الأعداد هو: $totalSum');
في هذا المثال، تم تعريف دالة “sumList” التي تأخذ قائمة من الأعداد كمعامل. تقوم الدالة بجمع جميع الأعداد في القائمة وتعيد المجموع. يتم استدعاء الدالة عن طريق تمرير قائمة الأعداد “numList” وتخزين النتيجة في المتغير “totalSum”، ثم يتم طباعة النتيجة.
هل يمكنني تحديد المزيد من المعاملات في دالة واحدة؟
نعم، يمكنك تحديد المزيد من المعاملات في دالة واحدة في لغة Dart. يمكنك تعريف قائمة من المعاملات داخل قوسين مربعين ([]). كل معامل يتم تحديده بواسطة نوعه واسمه، ويمكن تعيين قيم افتراضية للمعاملات إذا لزم الأمر.
إليك مثال يوضح كيفية تحديد المزيد من المعاملات في دالة واحدة:
void printPersonDetails(String name, {int age = 30, String address = 'غير محدد'}) { print('اسم الشخص: $name'); print('عمره: $age سنة'); print('عنوانه: $address'); }
في المثال أعلاه، تم تعريف دالة تسمى “printPersonDetails” تأخذ ثلاثة معاملات. المعامل الأول هو “name” من نوع String، وهو مطلوب (بدون قيمة افتراضية). المعامل الثاني هو “age” من نوع int، وله قيمة افتراضية تساوي 30. المعامل الثالث هو “address” من نوع String، وله قيمة افتراضية تساوي “غير محدد”.
يمكن استدعاء الدالة “printPersonDetails” كما يلي:
printPersonDetails('محمد'); .
سيتم طباعة التفاصيل الخاصة بالشخص بما في ذلك الاسم والعمر والعنوان. ستكون النتيجة كالتالي:
اسم الشخص: محمد عمره: 30 سنة عنوانه: غير محدد
يمكنك أيضًا تمرير قيم للمعاملات الإضافية إذا كنت ترغب في ذلك:
printPersonDetails('سجى', age: 29, address: 'بانت غرب'); .
ستطبع الدالة التفاصيل بناءً على القيم التي تم تمريرها:
اسم الشخص: سجى عمره: 29 سنة عنوانه: بانت غرب
هكذا يمكنك تحديد المزيد من المعاملات في دالة واحدة في لغة Dart لتلبية احتياجاتك.
هل يمكنني تحديد قيم افتراضية للمعاملات الإضافية في دالة واحدة؟
نعم، يمكنك تحديد قيم افتراضية للمعاملات الإضافية في دالة واحدة في لغة Dart. عند تعريف المعاملات الإضافية، يمكنك تعيين قيم افتراضية لهذه المعاملات بنفس الطريقة التي تم توضيحها في الأمثلة السابقة.
إليك مثال يوضح كيفية تحديد قيم افتراضية للمعاملات الإضافية في دالة واحدة:
void printPersonDetails(String name, {int age = 30, String address = 'غير محدد'}) { print('اسم الشخص: $name'); print('عمره: $age سنة'); print('عنوانه: $address'); }
في المثال أعلاه، المعاملات الإضافية “age” و “address” لها قيم افتراضية معينة. إذا لم يتم تمرير قيم لهذه المعاملات عند استدعاء الدالة، فسيتم استخدام القيم الافتراضية بدلاً من ذلك.
يمكن استدعاء الدالة “printPersonDetails” بدون تحديد قيم للمعاملات الإضافية كما يلي:
printPersonDetails('محمد'); .
سيتم طباعة التفاصيل الخاصة بالشخص بما في ذلك الاسم والعمر والعنوان. ستكون النتيجة كالتالي:
اسم الشخص: محمد عمره: 30 سنة عنوانه: غير محدد
يمكنك أيضًا تمرير قيم للمعاملات الإضافية إذا كنت ترغب في ذلك:
printPersonDetails('سجى', age: 29, address: 'بانت غرب'); .
ستطبع الدالة التفاصيل بناءً على القيم التي تم تمريرها:
اسم الشخص: سجى عمره: 29 سنة عنوانه: بانت غرب
بهذه الطريقة، يمكنك تحديد قيم افتراضية للمعاملات الإضافية في دالة واحدة في لغة Dart.