تخطَّ إلى المحتوى

الدوال

الدوال هي وحدات الكود القابلة لإعادة الاستخدام. تساعد على تنظيم الكود وتقليل التكرار.

دالة تحية() {
اطبع("مرحباً من الدالة!");
}
تحية(); // يطبع: مرحباً من الدالة!
دالة اجمع(أ: صحيح, ب: صحيح) -> صحيح {
أرجع أ + ب;
}
// الاستدعاء
دع ناتج = اجمع(15, 27);
اطبع_صحيح(ناتج); // 42
دالة مربع(س: صحيح) -> صحيح {
أرجع س * س;
}
دالة احسب_دائرة(نق: عشري) -> عشري {
أرجع 3.14159 * نق * نق;
}
دالة رسالة_ترحيب() -> نص {
أرجع "أهلاً وسهلاً!";
}
دالة اعرض_رسالة(نص_الرسالة: نص) {
اطبع(نص_الرسالة);
}

الدوال التكرارية (Recursive)

Section titled “الدوال التكرارية (Recursive)”

دالة تستدعي نفسها:

// حساب فيبوناتشي
دالة فيب(ن: صحيح) -> صحيح {
إذا ن <= 1 {
أرجع ن;
}
أرجع فيب(ن - 1) + فيب(ن - 2);
}
// الاستدعاء
اطبع_صحيح(فيب(10)); // 55
دالة مضروب(ن: صحيح) -> صحيح {
إذا ن <= 1 {
أرجع 1;
}
أرجع ن * مضروب(ن - 1);
}
اطبع_صحيح(مضروب(5)); // 120

كل برنامج كنوز يبدأ من الدالة رئيسية:

دالة رئيسية() {
اطبع("بداية البرنامج");
}
دالة رئيسية() -> صحيح {
اطبع("البرنامج انتهى بنجاح");
أرجع 0; // 0 يعني نجاح
}
دالة اطبع_القيمة(قيمة: &ص64) {
اطبع_صحيح(*قيمة);
}
دع عدد = 42;
اطبع_القيمة(&عدد);

مرجع متغير (للقراءة والكتابة)

Section titled “مرجع متغير (للقراءة والكتابة)”
دالة زد_القيمة(قيمة: &متغير ص64) {
*قيمة = *قيمة + 1;
}
دع متغير رقم: ص64 = 10;
زد_القيمة(&متغير رقم);
اطبع_صحيح(رقم); // 11

دوال مجهولة قصيرة:

// تعريف لامدا للجمع
دع جمع = |س: صحيح, ص: صحيح| -> صحيح {
أرجع س + ص;
};
دع ناتج = جمع(10, 20);
اطبع_صحيح(ناتج); // 30
دع مربع = |س: صحيح| -> صحيح {
أرجع س * س;
};
اطبع_صحيح(مربع(7)); // 49

استخدام لامدا للمقارنة

Section titled “استخدام لامدا للمقارنة”
دع الأقصى = |س: صحيح, ص: صحيح| -> صحيح {
إذا س > ص {
أرجع س;
}
أرجع ص;
};
اطبع_صحيح(الأقصى(25, 18)); // 25
// دالة بسيطة
دالة تحية() {
اطبع("مرحباً!");
}
// دالة مع معاملات
دالة اجمع(أ: صحيح, ب: صحيح) -> صحيح {
أرجع أ + ب;
}
// دالة تكرارية
دالة فيب(ن: صحيح) -> صحيح {
إذا ن <= 1 {
أرجع ن;
}
أرجع فيب(ن - 1) + فيب(ن - 2);
}
// دالة حساب المساحة
دالة مساحة_دائرة(نق: عشري) -> عشري {
أرجع 3.14159 * نق * نق;
}
دالة رئيسية() {
اطبع("=== الدوال ===");
// استدعاء دالة بسيطة
تحية();
// دالة مع معاملات
دع ناتج = اجمع(15, 27);
اطبع("15 + 27 = ");
اطبع_صحيح(ناتج);
// فيبوناتشي
اطبع("=== فيبوناتشي ===");
لكل ي في 0..10 {
اطبع_صحيح(فيب(ي));
}
// مساحة دائرة
دع م = مساحة_دائرة(5.0);
اطبع("مساحة الدائرة (نق=5): ");
اطبع_عشري(م);
// لامدا
دع ضعف = |س: صحيح| -> صحيح { أرجع س * 2; };
اطبع("ضعف 7: ");
اطبع_صحيح(ضعف(7));
}