تخيّل أنك تقسم حساب المطعم على 3 أصدقاء كل أسبوع. بدل أن تكتب نفس العملية كل مرة، تصنع دالة خاصة بك مرة واحدة، ثم تستخدمها كلما احتجت إليها. نكتب الكلمة function، ثم الاسم، ثم المعامل بين قوسين، ثم الأوامر بين { }:
function split3(total) {
let result = total / 3;
return result;
}
console.log(split3(2700));
console.log(split3(450));900 150
| الجزء | في المثال |
|---|---|
| اسم الدالة | split3 |
| المعامل: يستقبل القيمة | total |
| إرجاع النتيجة | return result; |
| الاستدعاء بالوسيط 2700 | split3(2700) |
عند الاستدعاء split3(2700) تدخل القيمة 2700 في المعامل total، وتُنفَّذ الأوامر، ثم تعيد return الناتج إلى مكان الاستدعاء فيطبعه console.log. والدالة لا تعمل بمجرد تعريفها؛ لا بد من استدعائها.
معاملان أو بدون معاملات
إذا احتاجت الدالة إلى أكثر من قيمة نفصل المعاملات بفواصل. وإذا لم تحتج إلى أي قيمة نترك القوسين فارغين، في التعريف وفي الاستدعاء:
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)
النطاق هو المكان الذي يمكن فيه استخدام المتغير. المتغير المُعلن داخل أقواس { } لدالة لا يوجد خارجها. لذلك هذا البرنامج يسبب خطأ:
function split5(total) {
let result = total / 5;
return result;
}
console.log(result);ReferenceError: result is not defined
الحل أن نستخدم القيمة التي تُرجعها الدالة: console.log(split5(6250)). ونفس القاعدة تنطبق على أقواس if وfor: إذا أردت المتغير بعد الأقواس فأعلنه قبلها.
let reward = 0;
let contest = 1;
if (contest == 1) {
reward = 300;
}
console.log("You won " + reward + " pounds");You won 300 pounds
تدريبات
أنشئ دالة divide6 بالمعامل total تُخزّن total ÷ 6 في المتغير per وتُرجعه. ثم اطبع ناتج divide6(72).
اضغط «تشغيل» لترى النتيجة. الدالة تحسب الناتج لكنها لا تُعيده. أكمل الفراغ لتُرجع قيمة result، فيُطبع 70.
function calc(num) {
let result = num * 7;
___
}
console.log(calc(10));اضغط «تشغيل» لترى النتيجة. أنشئ فوق السطر الموجود دالة goodNight بدون معاملات تُرجع النص Good night!.
console.log(goodNight());
اضغط «تشغيل» لترى النتيجة. استدعِ الدالة mul بالوسيطين 9 و7 واطبع الناتج.
function mul(num1, num2) {
let answer = num1 * num2;
return answer;
}
console.log(___);اضغط «تشغيل» لترى النتيجة. البرنامج يسبب خطأ لأن result مُعلن داخل الدالة. صحّح السطر الأخير ليطبع ناتج تقسيم 6250 على 5 باستخدام الدالة.
function split5(total) {
let result = total / 5;
return result;
}
console.log(result);اضغط «تشغيل» لترى النتيجة. أنشئ دالة finalPrice بمعاملين price وdiscount (نسبة مئوية) تُرجع السعر بعد الخصم: price - price * discount / 100. اطبع finalPrice(400, 25) ثم finalPrice(250, 10).
اضغط «تشغيل» لترى النتيجة. أنشئ دالة checkResult بالمعامل score تُرجع Pass إذا كانت الدرجة 50 أو أكثر، وإلا تُرجع Fail. اطبع checkResult(73) ثم checkResult(41).
تلميح
أعلن result قبل if، وأعطه قيمة في كل فرع، ثم أرجِعه بعد if.اضغط «تشغيل» لترى النتيجة. النقاط الرئيسية
function name(param) { ... return value; }ثم الاستدعاءname(argument).- يمكن أن تكون الدالة بمعامل واحد أو أكثر أو بدون معاملات؛ والوسائط تُمرَّر بنفس الترتيب.
- المتغير المُعلن داخل
{ }لا يُستخدم خارجها (النطاق)؛ استخدم القيمة المُرجعة.