Javaنص تعريفي واستدعاء وظائف مع مثال
⚡ ملخص ذكي
Javaتقوم وظائف البرمجة النصية بتجميع كتل التعليمات البرمجية القابلة لإعادة الاستخدام والتي يتم تشغيلها فقط عند استدعائها، ويوضح هذا الدليل كيفية تعريف واحدة منها، وتمرير الوسائط إليها، وإعادة قيمة إلى المستدعي.
ما هي الوظيفة في Javaالبرنامج النصي؟
تُعدّ الدوال بالغة الأهمية والفائدة في أي لغة برمجة، إذ تُتيح إعادة استخدام الكود. الدالة عبارة عن كتلة من التعليمات البرمجية تُنفّذ فقط عند استدعائها. فإذا كان لديك بضعة أسطر من التعليمات البرمجية التي تحتاج إلى استخدامها عدة مرات، يمكنك إنشاء دالة تتضمن الأسطر المتكررة، ثم استدعاء هذه الدالة في أي مكان تريده.
لا يتم تنفيذ أي شيء داخل الأقواس بشكل مستقل. يقوم المتصفح بتخزين الكتلة البرمجية بالاسم الذي حددته لها، ولا يتم تنفيذ الكود إلا عند كتابة هذا الاسم متبوعًا بأقواس، مثل: myFunction()لذا، فإن الوظائف تقع في صميم كل Javaسيناريو البرنامج، سواء كان النص موجودًا أم لا داخل الصفحة أو في ملف خارجي.
كيفية إنشاء وظيفة في Javaسيناريو
- استخدم الكلمة الأساسية وظيفة متبوعًا باسم الوظيفة.
- بعد اسم الوظيفة ، افتح الأقواس وأغلقها.
- بعد الأقواس ، افتح وأغلق الأقواس المتعرجة.
- داخل الأقواس المتعرجة ، اكتب سطور التعليمات البرمجية الخاصة بك.
بناء الجملة:
function functionname()
{
lines of code to be executed
}
يوضح المثال أدناه myFunction() ثم يستدعيها في السطر التالي مباشرةً، بحيث تظهر الرسالة فور تحميل الصفحة. جرب ذلك بنفسك:
<html>
<head>
<title>Functions!!!</title>
<script type="text/javascript">
function myFunction()
{
document.write("This is a simple function.<br />");
}
myFunction();
</script>
</head>
<body>
</body>
</html>
وظيفة مع الحجج
يمكنك إنشاء دوال مع وسائط أيضًا. يجب تحديد الوسائط بين قوسين.
بناء الجملة:
function functionname(arg1, arg2)
{
lines of code to be executed
}
هنا countVowels() يستقبل البرنامج أي اسم يُدخله الزائر في خانة البحث، ثم يمر على كل حرف، ويُبلغ عن عدد حروف العلة التي يحتويها الاسم. جرب ذلك بنفسك:
<html>
<head>
<script type="text/javascript">
var count = 0;
function countVowels(name)
{
for (var i=0;i<name.length;i++)
{
if(name[i] == "a" || name[i] == "e" || name[i] == "i" || name[i] == "o" || name[i] == "u")
count = count + 1;
}
document.write("Hello " + name + "!!! Your name has " + count + " vowels.");
}
var myName = prompt("Please enter your name");
countVowels(myName);
</script>
</head>
<body>
</body>
</html>
Javaقيمة إرجاع البرنامج النصي
يمكنك أيضًا إنشاء وظائف JS التي تُرجع القيم. داخل الوظيفة، تحتاج إلى استخدام الكلمة الأساسية عائد أعلى متبوعة بالقيمة التي سيتم إرجاعها.
بناء الجملة:
function functionname(arg1, arg2) { lines of code to be executed return val1; }
في هذا المثال الأخير returnSum() يُعيد هذا الأمر المجموع إلى السطر الذي استدعاه، بحيث يمكن دمج النتيجة في جملة بدلاً من طباعتها داخل الدالة. جرّب ذلك بنفسك:
<html>
<head>
<script type="text/javascript">
function returnSum(first, second)
{
var sum = first + second;
return sum;
}
var firstNo = 78;
var secondNo = 22;
document.write(firstNo + " + " + secondNo + " = " + returnSum(firstNo,secondNo));
</script>
</head>
<body>
</body>
</html>
أنواع الدوال في Javaسيناريو
تستخدم الأمثلة الثلاثة المذكورة أعلاه جميعها تعريف الدالة الكلاسيكي، ولكنه حديث Javaيقدم النص البرمجي عدة أشكال أخرى. وتختلف هذه الأشكال بشكل رئيسي في ما إذا كان المحرك يرفعها وفي كيفية تعامل كل منها مع this الكلمة.
| نوع الوظيفة | بناء الجملة النموذجي | عند استخدامه |
|---|---|---|
| إعلان الوظيفة | دالة greet() { } | منطق مُسمى وقابل لإعادة الاستخدام؛ يُرفع إلى أعلى نطاقه |
| تعبير الدالة | const greet = function () { }; | تخزين دالة في متغير؛ غير مرفوعة |
| دالة السهم (ES6) | const greet = () => { }; | استدعاءات قصيرة؛ ترث هذا من النطاق المحيط |
| وظيفة مجهولة | setTimeout(function () { }, 100); | منطق لمرة واحدة يتم تمريره مباشرة إلى دالة أخرى |
| إيف | (وظيفة () { })()؛ | يتم تشغيله فورًا ويحافظ على خصوصية متغيراته |
| أن نتواصل معك | items.forEach(showItem); | دالة يتم تمريرها إلى دالة أخرى ويتم استدعاؤها لاحقًا |
ملاحظة على الأمثلة أعلاه: استخدام العينات التاريخية var و document.write()ولا يزال كلاهما يعمل في جميع المتصفحات. وتُعرّف الممارسة الحالية المتغيرات باستخدام let or const ويطبع المخرجات من خلال console.log() أو عن طريق الضبط textContent على عنصر، لأن document.write() يمسح الصفحة التي تم تحميلها بالفعل. type="text/javascript" السمة اختيارية أيضًا في HTML5.
معلمات الدالة، والوسائط، والقيم الافتراضية
المعاملات هي أسماء العناصر النائبة المدرجة في التعريف، بينما الوسائط هي القيم الحقيقية التي يتم توفيرها عند استدعاء الدالة. countVowels(name) في الاعلى، name هو المعامل والنص المكتوب في موجه الأوامر هو الوسيط.
function greet(user, greeting = "Hello") { return greeting + ", " + user; } greet("Ann"); greet("Ann", "Welcome");
- يصبح المعامل الذي لا يحتوي على وسيط مطابق
undefinedما لم يتم توفير قيمة افتراضية، كماgreetingتجدها هنا. - يتم تجاهل الوسائط الإضافية بواسطة قائمة المعلمات، ولكن تظل قابلة للوصول من خلال
argumentsالكائن داخل أي دالة غير سهمية. - معامل الراحة مكتوب على النحو التالي
...valuesيجمع كل الحجج المتبقية في حجة حقيقية مجموعة.
نطاق الوظيفة والرفع في Javaسيناريو
يُحدد مكان كتابة الدالة ما يمكنها رؤيته ومتى يمكن استدعاؤها. هناك قاعدتان تفسران تقريبًا كل المفاجآت التي يواجهها المبتدئون.
- الرفع: تُنقل تعريفات الدوال إلى أعلى نطاقها قبل تشغيل البرنامج النصي، لذا يمكن استدعاؤها في سطر أعلى تعريفها. أما تعابير الدوال ودوال الأسهم فلا تُنقل إلى أعلى نطاقها، وتُصدر خطأً إذا تم استدعاؤها مبكرًا.
- مجال العمل المتغيرات المعلنة باستخدام
varتكون العناصر الموجودة داخل الدالة مرئية في جميع أنحاء تلك الدالة، بينماletوconstتقتصر على الكتلة التي توجد فيها. أي شيء يتم تعريفه خارج كل دالة يكون عامًا.
يُظهر عداد حروف العلة هذا عمليًا. count تم تعريف المتغير خارج الدالة، لذا فإن استدعاء countVowels() في المرة الثانية على نفس الصفحة، يستمر الحساب في الإضافة إلى المجموع السابق بدلاً من إعادة البدء من الصفر. نقل التصريح داخل الدالة سيؤدي إلى إعادة ضبطه في كل استدعاء.
هذه scoping تنطبق القواعد أيضًا على كود جانب الخادم، ولهذا السبب ينطبق نفس المنطق عند كتابة الدوال لـ Node.js ولماذا يظهر سلوك الوظيفة بشكل متكرر في Javaأسئلة المقابلة المكتوبة.
