1. مقدمة عن الدوال في Dart
📌 التعريف:
الدالة (Function) هي وحدة من الكود قابلة لإعادة الاستخدام تقوم بتنفيذ مهمة معينة.
الهدف منها تنظيم الكود، تسهيل القراءة، وتقليل التكرار.
✅ الفوائد:
- إعادة استخدام الكود.
- تسهيل اختبار الكود (Testability).
- تسهيل الصيانة والتوسعة.
- تحسين الأداء والتنظيم.
🛠️ ملاحظة:
في Dart، كل شيء هو كائن (Object)، حتى الدوال تعتبر كائنات من نوع Function.
✅ 2. تعريف الدوال (Function Definition)
📌 الصيغة العامة:
Type functionName() {
// body
return value;
}
JavaScript🧪 مثال:
int sum(int a, int b) {
return a + b;
}
JavaScript📌 شرح:
int
→ نوع القيمة التي ترجعها الدالة.sum
→ اسم الدالة.(int a, int b)
→ المعطيات (parameters).return a + b;
→ ناتج الدالة.
✳️ أنواع الدوال حسب البنية:
✅ 1. دالة لا تعيد شيئًا (void):
void printMessage() {
print("Welcome to Dart!");
}
printMessage();
JavaScript✅ 2. دالة تعيد قيمة:
String greet() {
return "Hello yasin";
}
greet();
JavaScript✅ 3. دالة بدون بارامترات:
int getYear() {
return DateTime.now().year;
}
JavaScript✅ 3. استدعاء الدوال (Function Call)
📌 كيف يتم الاستدعاء؟
بعد تعريف الدالة، تستدعيها باسمها وتمرير البارامترات إن وجدت.
🧪 أمثلة:
void main() {
printMessage(); // دالة بدون معطيات
print(greet("Yasin")); // دالة مع معطى
int result = sum(5, 7); // دالة تعيد قيمة
print("Sum: $result");
}
JavaScript⚠️ محاذير:
- لا تستدعِ الدالة قبل تعريفها في نطاق محلي.
- تأكد من تطابق نوع المعطيات مع ما تطلبه الدالة.
- احذر من تمرير null بدون دعم null-safety.
✅ 4. الدوال بأنواع مختلفة من المعطيات
📌 أنواع المعطيات:
✅ 1. المعطيات الإلزامية (Required Parameters):
void printUser(String name, int age) {
print("Name: $name, Age: $age");
}
JavaScript✅ 2. المعطيات الاختيارية positional optional (بين [ ]):
void printUser([String? name, int? age]) {
print("Name: $name, Age: $age");
}
JavaScript✅ 3. المعطيات المسماة (Named Parameters):
void printUser({String? name, int? age}) {
print("Name: $name, Age: $age");
}
JavaScript✅ 4. معطيات مسماة مع قيم افتراضية:
void printUser({String name = "غير معروف", int age = 0}) {
print("Name: $name, Age: $age");
}
JavaScript🧪 استدعاء دالة بمعطيات مسماة:
printUser(name: "Yasin", age: 25);
printUser(); // تستخدم القيم الافتراضية
JavaScript✳️ المقارنة:
النوع | ترتيب مهم؟ | اسم البارامتر مطلوب؟ | يمكن إعطاء قيمة افتراضية؟ |
---|---|---|---|
Required | نعم | لا | لا |
Optional positional | نعم | لا | نعم |
Named | لا | نعم (مع required) | نعم |
⚠️ ملاحظات:
- يفضل استخدام المعطيات المسماة لزيادة وضوح الكود.
- المعطيات الاختيارية positional تسبب صعوبة في القراءة.
✅ 5. إرجاع القيم (Return Values)
📌 return:
كلمة مفتاحية تُستخدم لإرجاع قيمة من الدالة إلى المكان الذي تم استدعاؤها فيه.
🧪 مثال:
double calculateArea(double radius) {
return 3.14 * radius * radius;
}
JavaScript🧪 دالة بدون return (تعيد void):
void showResult() {
print("No result to return.");
}
JavaScript✅ الفوائد:
- تسمح لك بإرجاع نتائج المعالجة.
- تسهل استخدام نتائج الدالة في أماكن أخرى بالكود.
⚠️ ملاحظات:
- لا يمكن استخدام
return
في دوالvoid
إلا لإنهاء التنفيذ فقط بدون قيمة. - يجب تطابق نوع القيمة المُرجعة مع
returnType
.
📌 مثال تطبيقي شامل:
String formatMessage(String name, {int age = 18}) {
return "Welcome $name, you are $age years old.";
}
void main() {
String msg = formatMessage("Yasin");
print(msg);
}
JavaScript✅ التوصيات العامة:
- اجعل الدوال صغيرة وواضحة.
- استخدم أسماء معبرة توضح ما تقوم به الدالة.
- قلل المعطيات قدر الإمكان، واستعمل المعطيات المسماة عند الحاجة.
- أعد استخدام الدوال بدلًا من تكرار الكود.
✅ أولًا: ما هي الدالة بدون بارامترات؟
هي دالة لا تحتاج إلى استقبال أي قيمة عند استدعائها. فقط تنفذ مهمة معينة، مثل الطباعة أو إرجاع قيمة ثابتة.
✅ 1. دالة بدون بارامترات وبدون إرجاع (void)
📌 التعريف:
void sayHello() {
print("Hello, welcome to Dart!");
}
JavaScript📌 الاستدعاء:
void main() {
sayHello(); // استدعاء الدالة
}
JavaScript🧪 الناتج:
Hello, welcome to Dart!
JavaScript✅ 2. دالة بدون بارامترات ولكن تُرجع قيمة (return)
📌 التعريف:
String getGreeting() {
return "Good morning!";
}
JavaScript📌 الاستدعاء مع الطباعة:
void main() {
print(getGreeting()); // استدعاء وطباعة ناتج الدالة
}
JavaScript🧪 الناتج:
Good morning!
JavaScript✅ 3. دالة تحسب وتعيد نتيجة بدون استقبال معطيات
int getLuckyNumber() {
return 7;
}
void main() {
int number = getLuckyNumber();
print("Your lucky number is: $number");
}
JavaScript🧪 الناتج:
Your lucky number is: 7
JavaScript✅ 4. استخدام دالة void لطباعة عدة أسطر
void printWelcomeMessage() {
print("**************************");
print("* Welcome to Dart! *");
print("**************************");
}
void main() {
printWelcomeMessage(); // استدعاء الدالة
}
JavaScript✅ 5. استخدام دالة داخل دالة (Nested Call)
String getName() {
return "Yasin";
}
void greet() {
print("Hello, ${getName()}!");
}
void main() {
greet();
}
JavaScript🧪 الناتج:
Hello, Yasin!
JavaScript✅ ملخص التوصيات:
الحالة | النوع | كلمة return | مثال |
---|---|---|---|
تنفذ أمر فقط | void | ❌ | void sayHi() |
تُرجع قيمة ثابتة | غير void | ✅ | String getName() |
تُرجع قيمة محسوبة | غير void | ✅ | int getScore() |
✅ ⚠️ ملاحظات هامة:
- إذا لم تستخدم
return
في دالة غيرvoid
، ستحصل على خطأ. - الدوال
void
تُستخدم غالبًا للطباعة، الإشعارات، أو الأوامر البسيطة. - الأفضل دائمًا جعل اسم الدالة يعبر بدقة عن مهمتها.