وأنت بتتعلم الدوال هتقابل كلمتين بيتستخدموا كتير وهما Parameter و Argument الاتنين مرتبطين بمدخلات الدالة لكن كل كلمة بتوصف دور مختلف فهم الفرق بيساعدك تقرأ التوثيق وتشرح الكود من غير لخبطة
ال Parameter بيتكتب وقت تعريف الدالة
ال Parameter هو اسم معامل بتعرفه في تعريف الدالة علشان يستقبل قيمة وقت الاستدعاء فكر فيه كمكان له اسم جوه الدالة الاسم ده بتستخدمه في خطوات التنفيذ
function greet(personName) {
return "Hello " + personName;
}
console.log(greet("Mona"));Hello Monaال Argument بتقدمه وقت الاستدعاء
في المثال ال personName هو ال Parameter أما النص "Mona" فهو ال Argument اللي قدمناه عند استدعاء greet ال Parameter اسمه ثابت في تعريف الدالة لكن قيمته ممكن تختلف في كل استدعاء
مش لازم ال Argument يكون قيمة مكتوبة مباشرة ممكن يكون متغير أو تعبير بيتحسب قبل ما الدالة تبدأ
function double(number) {
return number * 2;
}
const price = 15;
console.log(double(price));
console.log(double(10 + 5));30
30الترتيب مهم لما يكون فيه أكتر من معامل
لو الدالة بتستقبل اسم منتج وعدد وحدات فالاستدعاء الموضعي بيربط أول قيمة بأول معامل وثاني قيمة بثاني معامل اختار أسماء واضحة علشان الاستخدام يبقى مفهوم
function orderLabel(product, quantity) {
return quantity + " x " + product;
}
console.log(orderLabel("Notebook", 3));
console.log(orderLabel(3, "Notebook"));3 x Notebook
Notebook x 3التبديل هنا غير معنى النتيجة من غير ما يعمل خطأ لأن المثال بيجمع نصوص قراءة اسم الدالة وحده مش كفاية لازم تعرف مدخلاتها وترتيبها
قيمة افتراضية لما المدخل يكون ناقص
في JavaScript تقدر تحدد Default Parameter علشان تستخدم قيمة بديلة عند عدم تمرير قيمة أو تمرير undefined لكن null مش بتشغل القيمة الافتراضية
function welcome(name = "Guest") {
return "Welcome " + name;
}
console.log(welcome());
console.log(welcome(undefined));
console.log(welcome(null));Welcome Guest
Welcome Guest
Welcome nullاستقبال عدد متغير من القيم
ال Rest Parameter بيجمع القيم المتبقية في Array باستخدام ثلاث نقط قبل الاسم لازم يكون آخر معامل ومش معنى وجوده إن كل المدخلات مناسبة للحساب لازم طبيعة القيم تتفق مع وظيفة الدالة
function sum(...numbers) {
let total = 0;
for (const number of numbers) {
total += number;
}
return total;
}
console.log(sum(5, 10, 15));
console.log(sum());30
0نفس المفهوم في PHP
الاسم بعد تعريف الدالة هو المعامل والقيمة وقت الاستخدام هي المدخل المرسل نفس الفكرة بتفضل موجودة رغم اختلاف صيغة الكتابة
<?php
function greet(string $name): string
{
return "Hello " . $name;
}
echo greet("Mona") . PHP_EOL;Hello Monaالمدخلات المسماة في Python
في Python تقدر في حالات مناسبة تمرر قيمة باسم المعامل بدل الاعتماد على الترتيب بس المثال بيوضح نفس الفكرة باستخدام Keyword Arguments
def order_label(product, quantity):
return f"{quantity} x {product}"
print(order_label(quantity=3, product="Notebook"))3 x Notebookخلي بالك من اختلاف قواعد اللغات
المفهوم مش معناه إن قواعد عدد المدخلات واحدة في كل اللغات JavaScript ممكن تخلي المعامل غير المرسل undefined بينما Python و PHP ممكن يرفضوا غياب معامل مطلوب راجع توثيق اللغة بدل نقل السلوك من لغة للتانية
كتدريب اعمل دالة تستقبل سعر وعدد وترجع الإجمالي ثم حدد بنفسك أسماء المعاملات والقيم المرسلة وجرب استدعاءين بقيم مختلفة