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

الدوال في JavaScript (Functions)

الدرس 11 من 28 · JavaScript

كلما كبر برنامجك، ستجد نفسك تكرر نفس الكود في أماكن كثيرة. الدوال (Functions) هي الحل: تكتب الكود مرة واحدة، وتعطيه اسماً، ثم تستخدمه متى شئت. في هذا الدرس ستتعلم كيف تنشئ دالة، وتعطيها بيانات، وتأخذ منها نتيجة.

الدالة مثل وصفة طبخ مكتوبة في كتاب. تكتب الوصفة مرة واحدة، وكلما أردت أن تطبخ الطبق، تفتح الكتاب وتتبع الخطوات. لا تعيد كتابة الوصفة كل مرة!

function greet() {
console.log("أهلاً بك في مدرسة البرمجة!");
}
greet();
greet();
الناتج
أهلاً بك في مدرسة البرمجة!
أهلاً بك في مدرسة البرمجة!

هنا خطوتان منفصلتان:

  1. تعريف الدالة: الكلمة function، ثم اسم الدالة greet، ثم قوسان، ثم الكود بين القوسين المعقوفين. التعريف وحده لا يُنفّذ أي شيء، إنه مجرد كتابة الوصفة.
  2. استدعاء الدالة: كتابة اسمها متبوعاً بقوسين greet(). هنا فقط يُنفّذ الكود. استدعيناها مرتين فظهرت الرسالة مرتين.

المعاملات: أعطِ الدالة بيانات

Section titled “المعاملات: أعطِ الدالة بيانات”

الدالة السابقة تقول نفس الشيء دائماً. لنجعلها ترحب بأي شخص. نضع بين القوسين معاملاً (Parameter)، وهو متغير يستقبل القيمة عند الاستدعاء:

function greetUser(name) {
console.log(`أهلاً يا ${name}`);
}
greetUser("مريم");
greetUser("يوسف");
الناتج
أهلاً يا مريم
أهلاً يا يوسف

المعامل name مثل خانة فارغة في استمارة. وعند الاستدعاء تملأ الخانة بقيمة حقيقية مثل "مريم". القيمة التي تمررها تسمى وسيطاً (Argument).

حتى الآن كانت دوالنا تطبع فقط. لكن غالباً تريد أن تحسب الدالة شيئاً وتعطيك النتيجة لتستخدمها لاحقاً. هنا تأتي return:

function add(a, b) {
return a + b;
}
let result = add(4, 6);
console.log(result);
console.log(add(10, 20) * 2);
الناتج
10
60

الدالة هنا مثل آلة العصير: تضع فيها فاكهة (المعاملات)، فتُخرج لك كوب عصير (القيمة المرجعة). ويمكنك أن تضع الكوب في أي مكان: في متغير، أو داخل عملية حسابية، أو داخل console.log.

عندما تصل JavaScript إلى return، تخرج من الدالة فوراً، ولا تنفّذ أي سطر بعدها:

function checkAge(age) {
if (age < 13) {
return "عذراً، الموقع لمن هم 13 سنة فأكبر";
}
return "مرحباً بك!";
}
console.log(checkAge(10));
console.log(checkAge(16));
الناتج
عذراً، الموقع لمن هم 13 سنة فأكبر
مرحباً بك!

إذا نسيت return، فالدالة تُرجع undefined حتى لو حسبت شيئاً:

function double(n) {
n * 2;
}
console.log(double(4));
الناتج
undefined

القيم الافتراضية للمعاملات

Section titled “القيم الافتراضية للمعاملات”

ماذا لو استدعيت الدالة بدون أن تعطيها كل القيم؟ المعامل الناقص يصبح undefined. لتجنب ذلك، أعطِ المعامل قيمة افتراضية بعلامة =:

function power(base, exp = 2) {
return base ** exp;
}
console.log(power(5));
console.log(power(2, 3));
الناتج
25
8

في الاستدعاء الأول لم نعطِ exp قيمة، فاستُخدمت القيمة الافتراضية 2.

  • عدم التكرار: تكتب الكود مرة واحدة وتستخدمه مئة مرة.
  • سهولة التعديل: إذا أردت تغيير طريقة الحساب، تعدّل في مكان واحد فقط.
  • تنظيم البرنامج: تقسّم المشكلة الكبيرة إلى مهام صغيرة، لكل منها دالة باسم واضح.

هذه دالة تحسب ثمن طلب في متجر: السعر × الكمية + رسوم التوصيل (افتراضياً 20). جرّب استدعاءات جديدة، وأضف معاملاً للخصم:

جرّب بنفسكJavaScript
أو اضغط Ctrl + Enter

الناتج

  • نسيان القوسين عند الاستدعاء: كتابة greet وحدها لا تنفّذ الدالة. الاستدعاء يحتاج greet().
  • الطباعة بدلاً من الإرجاع: إذا كتبت console.log داخل الدالة بدلاً من return، فلن تستطيع استخدام النتيجة في حسابات أخرى.
  • كتابة كود بعد return: أي سطر بعد return في نفس المسار لن يُنفّذ أبداً.

سؤال

ما الذي يُنفّذ الكود الموجود داخل الدالة؟

سؤال

ماذا تُرجع دالة ليس فيها return؟

  • الدالة كود له اسم، تعرّفه مرة بـ function وتستدعيه بـ name() متى شئت.
  • المعاملات خانات تستقبل القيم عند الاستدعاء.
  • return تُرجع نتيجة من الدالة وتُنهي تنفيذها فوراً.
  • الدالة بدون return تُرجع undefined.
  • القيم الافتراضية مثل exp = 2 تُستخدم عندما لا يُمرَّر الوسيط.