وأنت بتتعلم الدوال هتقابل كلمتين بيتستخدموا كتير وهما 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 ممكن يرفضوا غياب معامل مطلوب راجع توثيق اللغة بدل نقل السلوك من لغة للتانية

كتدريب اعمل دالة تستقبل سعر وعدد وترجع الإجمالي ثم حدد بنفسك أسماء المعاملات والقيم المرسلة وجرب استدعاءين بقيم مختلفة

مصادر للتوسع