اذهب إلى المحتوى
  • 0

شرح مفصل للدوال عديمة الاسم (anonymous functions)

محمود السعيد عوف

السؤال

السلام عليكم ورحمة الله وبركاته اريد شرح مفصل للدوال عديمة الاسم وما الفرق بينها وبين الدوال المسماة واين استخدم هذه واين استخدم هذه حيث ان في مواقع تحدياتا لبرمجة اغلب الدوال المستخدمة في حل التحديات تكون عديمة الاسم وشكرا مقدما علي الرد 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

تلك عبارة عن دوال يتم تعريفها بدون اسم، أي بدلاً من تعريفها باستخدام الكلمة المفتاحية function متبوعة باسم، نقوم تعريفها باستخدام الكلمة المفتاحية function فقط، أو باستخدام صيغة arrow function.

function() {
  console.log(" دالة عديمة الاسم!");
}

والدوال عديمةالاسم لا نستطيع إعادة استخدامها مباشرًة، فليس لها اسم نستطيع من خلالها استدعائها.

أيضًا لا يتم تنفيذ الرفع Hoisting لها، أي لا تستطيع استدعائها قبل تعريفها في الكود أي قبل السطر الخاص بها في الكود، فنحن لا نستطيع ذلك بدون اسم لذا لا يتم رفعها.

والفائدة منها هي استخدامها كدالة  IIFE أي كـ (Immediately Invoked Function Expression) وهي دوال يتم تعريفها وتنفيذها مباشرةً.

(function() {
    console.log("أنا دالة عديمة الاسم!");

})();

لاحظ الأقواس التي حول الدالة والقوسين بعدها والتي تعني تنفيذها مباشرًة فور الوصول لتلك الدالة في الكود من قبل المترجم.

بالتالي في أي موضع لا تحتاج به إعادة استخدام تلك الدالة مرة أخرى في الكود، فقم بكتابتها بدون اسم، مثل دالة IIFE.

أو مثلاً كـ دوال Callback والتي تستخدم بكثرة كـ دوال يتم تمريرها كمعامل لدوال أخرى، مثل دوال معالجة الأحداث أو دوال setTimeout و setInterval.

setTimeout(function() {
  console.log("تم تنفيذ هذه الدالة بعد ثانية واحدة");
}, 1000);

أيضًا مع دوال ذات ترتيب أعلى Higher-Order Functions مثل map و filter و reduce.

const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map(function(number) {
  return number * 2;
});

وللعلم توفر جافاسكريبت صيغة مختصرة لكتابة الدوال عديمة الاسم، وهي Arrow Function.

const sum = (a, b) => a + b;

فلا تحتاج إلى استخدام الكلمة المفتاحية function، ولا تحتاج إلى استخدام الأقواس {} أو الكلمة المفتاحية return إن كان جسم الدالة يتكون من سطر واحد فقط، وترث قيمة this من النطاق scope المحيط بها.

وعلى الرغم من أنك تستطيع استخدام المتغير sum لاستدعاء الدالة أي من خلال اسم، لكن الدالة نفسها بدون اسم، لذا الأمر قد يحيرك قليلاً لفهمه.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

كما شرؤح لك مصطفى بشكل رائع أن الدوال عديمة الاسم أو Anonymous Functions هي دوال تُعرّف بدون اسم محدد. بدلاً من أن يكون للدالة اسم يمكن استدعاؤها به لاحقاً، يتم استخدامها في المكان الذي تم تعريفها فيه.

ولكن سأحاول شرح متى نستخدم الAnonymous Functions بشكل عملي

أولاً تُستخدم هذه الدوال  غالبًا في الأماكن التي تحتاج فيها إلى تمرير دالة كمعامل لدالة أخرى. على سبيل المثال، في المصفوفات عند استخدام map أو filter أو forEach.

const numbers = [1, 2, 3, 4];
const squaredNumbers = numbers.map(function(num) {
  return num * num;
});
console.log(squaredNumbers); // Output: [1, 4, 9, 16]

ثانياً عندما تحتاج إلى دالة تؤدي مهمة معينة ولا تحتاج إلى تكرارها في أماكن أخرى.

setTimeout(function() {
  console.log("Time's up!"); 
}, 2000); // يتم تنفيذ الدالة بعد 2 ثانية

و أحيانًا تحتاج إلى دالة داخل دالة أخرى لأداء مهمة محددة في نطاق صغير.

function outerFunction() { 
  return function() { 
    console.log("Inner function"); 
  }; 
} 
const inner = outerFunction(); 
inner(); // "Inner function"
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

حسنا جزاكم الله خيرا علي الاجابة ,  ولكن لا يوجد فرق بين الدوال عديمة الاسم عندما استخدم الكلمة المفتاحية function والدوال السهمية arrow function صحيح؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...