JavaScript / الدوال

إنشاء الدوال

أنشئ دالة بمعاملات وقيمة مُرجعة، واستدعها، واعرف أين يمكن استخدام المتغيرات (النطاق).

تخيّل أنك تقسم حساب المطعم على 3 أصدقاء كل أسبوع. بدل أن تكتب نفس العملية كل مرة، تصنع دالة خاصة بك مرة واحدة، ثم تستخدمها كلما احتجت إليها. نكتب الكلمة function، ثم الاسم، ثم المعامل بين قوسين، ثم الأوامر بين { }:

JavaScript
function split3(total) {
  let result = total / 3;
  return result;
}
console.log(split3(2700));
console.log(split3(450));
وحدة التحكم
900
150
الجزءفي المثال
اسم الدالةsplit3
المعامل: يستقبل القيمةtotal
إرجاع النتيجةreturn result;
الاستدعاء بالوسيط 2700split3(2700)

عند الاستدعاء split3(2700) تدخل القيمة 2700 في المعامل total، وتُنفَّذ الأوامر، ثم تعيد return الناتج إلى مكان الاستدعاء فيطبعه console.log. والدالة لا تعمل بمجرد تعريفها؛ لا بد من استدعائها.

معاملان أو بدون معاملات

إذا احتاجت الدالة إلى أكثر من قيمة نفصل المعاملات بفواصل. وإذا لم تحتج إلى أي قيمة نترك القوسين فارغين، في التعريف وفي الاستدعاء:

JavaScript
function sum(num1, num2) {
  let result = num1 + num2;
  return result;
}
function goodMorning() {
  return "Good morning!";
}
console.log(sum(50, 100));
console.log(goodMorning());
وحدة التحكم
150
Good morning!
مرّر الوسائط بنفس عدد المعاملات وبنفس ترتيبها: في sum(50, 100) يأخذ num1 القيمة 50 ويأخذ num2 القيمة 100. واختر للدالة اسمًا يصف عملها، بلا نقاط أو مسافات.

النطاق (Scope)

النطاق هو المكان الذي يمكن فيه استخدام المتغير. المتغير المُعلن داخل أقواس { } لدالة لا يوجد خارجها. لذلك هذا البرنامج يسبب خطأ:

JavaScript
function split5(total) {
  let result = total / 5;
  return result;
}
console.log(result);
وحدة التحكم
ReferenceError: result is not defined

الحل أن نستخدم القيمة التي تُرجعها الدالة: console.log(split5(6250)). ونفس القاعدة تنطبق على أقواس if وfor: إذا أردت المتغير بعد الأقواس فأعلنه قبلها.

JavaScript
let reward = 0;
let contest = 1;
if (contest == 1) {
  reward = 300;
}
console.log("You won " + reward + " pounds");
وحدة التحكم
You won 300 pounds

تدريبات

1اكتب البرنامجتدريب المنهج

أنشئ دالة divide6 بالمعامل total تُخزّن total ÷ 6 في المتغير per وتُرجعه. ثم اطبع ناتج divide6(72).

JavaScript Ctrl/⌘ + Enter للتشغيل · Esc ثم Tab للخروج من المحرر
وحدة التحكم
اضغط «تشغيل» لترى النتيجة.
2أكمل الفراغتدريب المنهج

الدالة تحسب الناتج لكنها لا تُعيده. أكمل الفراغ لتُرجع قيمة result، فيُطبع 70.

JavaScript Ctrl/⌘ + Enter للتشغيل · Esc ثم Tab للخروج من المحرر
function calc(num) {
  let result = num * 7;
  ___
}
console.log(calc(10));
وحدة التحكم
اضغط «تشغيل» لترى النتيجة.
3اكتب البرنامجتدريب المنهج

أنشئ فوق السطر الموجود دالة goodNight بدون معاملات تُرجع النص Good night!.

JavaScript Ctrl/⌘ + Enter للتشغيل · Esc ثم Tab للخروج من المحرر
console.log(goodNight());
وحدة التحكم
اضغط «تشغيل» لترى النتيجة.
4أكمل الفراغتدريب المنهج

استدعِ الدالة mul بالوسيطين 9 و7 واطبع الناتج.

JavaScript Ctrl/⌘ + Enter للتشغيل · Esc ثم Tab للخروج من المحرر
function mul(num1, num2) {
  let answer = num1 * num2;
  return answer;
}
console.log(___);
وحدة التحكم
اضغط «تشغيل» لترى النتيجة.
5عدّل البرنامجتدريب المنهج

البرنامج يسبب خطأ لأن result مُعلن داخل الدالة. صحّح السطر الأخير ليطبع ناتج تقسيم 6250 على 5 باستخدام الدالة.

JavaScript Ctrl/⌘ + Enter للتشغيل · Esc ثم Tab للخروج من المحرر
function split5(total) {
  let result = total / 5;
  return result;
}
console.log(result);
وحدة التحكم
اضغط «تشغيل» لترى النتيجة.
6اكتب البرنامجتدريب إضافي

أنشئ دالة finalPrice بمعاملين price وdiscount (نسبة مئوية) تُرجع السعر بعد الخصم: price - price * discount / 100. اطبع finalPrice(400, 25) ثم finalPrice(250, 10).

JavaScript Ctrl/⌘ + Enter للتشغيل · Esc ثم Tab للخروج من المحرر
وحدة التحكم
اضغط «تشغيل» لترى النتيجة.
7اكتب البرنامجتدريب إضافي

أنشئ دالة checkResult بالمعامل score تُرجع Pass إذا كانت الدرجة 50 أو أكثر، وإلا تُرجع Fail. اطبع checkResult(73) ثم checkResult(41).

تلميحأعلن result قبل if، وأعطه قيمة في كل فرع، ثم أرجِعه بعد if.
JavaScript Ctrl/⌘ + Enter للتشغيل · Esc ثم Tab للخروج من المحرر
وحدة التحكم
اضغط «تشغيل» لترى النتيجة.

النقاط الرئيسية

  • function name(param) { ... return value; } ثم الاستدعاء name(argument).
  • يمكن أن تكون الدالة بمعامل واحد أو أكثر أو بدون معاملات؛ والوسائط تُمرَّر بنفس الترتيب.
  • المتغير المُعلن داخل { } لا يُستخدم خارجها (النطاق)؛ استخدم القيمة المُرجعة.