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

متي يمكنني استخدام for each و متي يمكنني استخدام for of loop ؟

Marwan Farouq

السؤال


السلام عليكم و رحمه الله لقد لاحظت ان for of loop تؤدي نفس وظيفه for each فتطرق الي ذهني ان اعرف الفارق بينهم و الاهم هي الحالات المختلفه لاستخدام كل منهما.

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

Recommended Posts

  • 1

ال for loop بوجه عام هي أعم من الfor each

حيث أن ال for loop  تُستخدم لتنفيذ برمجية معينة او مجموعة من الأوامر لعدد من المرات بغض النظر عن نوع البرمجية,

بينما ال foreach تُستخدم لتنفيذ برمجية معينة على عناصر المصفوفة فهي حالة أخص من الfor loop وتُستخدم للتعامل مع المصفوفة وعمل iteration للعناصر

أي أن ال foreach تكون أفضل في حالة التعامل مع المصفوفات بينما الfor loop هي حالة أعم على سبيل المثال الشفرة التالية من الأسهل تنفيذها بال for loop 

function get_factorial(n)
{
  let result = n;
  for (let i =1; i < n; i++)
       result* = i;
  return result;
}

تلك الدالة تقوم بحساب الfactorial لرقم ما فإستخدمنا الfor loop بينما إن أردنا مثلًا المرور على عناصر مصفوفة ما وطباعة كل عنصر على حدا سيكون من الأسهل والمنطقي إستخدام ال foreach كما يظهر فالمثال التالي 

my_list = [1,2,3,4,5,6,7]
my_list.forEach(e=>console.log(e))

 

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

  • 0

يمكنك استعمال for each عندما يكون لديك ما يدعى ب collection أو container أي مثل مجموعة من الأغراض مجموعين سوية.

بينما for العادية يمكنك استعمالها في أي حالة تتضمن التكرار عدد من المرات.

أي بشكل عام يمكنك اعتبار for each حالة خاصة من ال for.

مثلاً لنفترض كنت تريد المرور على الأعداد من 1 إلى 100، لا فكرة أن تقوم بإنشاء مجموعة من الأعداد للمرور عليهم، يكفي أن تستعمل ال for العادية فهذا أفضل، بينما في حال كان لديك مصفوفة من الأغراض فقد يكون من الأسهل استعمال for each كما أن هذا يسهل قراءة الكود و يقلل الأخطاء التي قد تقع فيها نتيجة الوصول إلى خانة غير موجودة.

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

  • 0

أوصي دائمًا باستخدام .for … of .

  • إنه يعمل على أي تكرار
  • إنه يدعم جميع أنواع التحكم في التدفق في جسم الحلقة ، مثل  continue, break, return, yield و await.

كما أجدها أكثر قابلية للقراءة ، لكن هذا يعود إلى التفضيل. يعتقد بعض الناس أن forEach هو أسلوب وظيفي أكثر ، لكن هذا خطأ - ليس له قيمة نتيجة ويتعلق كله بآثار جانبية ، لذا فإن الحلقة ذات المظهر الحتمي تناسب هذا الغرض بشكل أفضل.

في الأداء ، for... of أسرع من forEach. يمكن العثور على النتائج هنا

forEach تعتبر 24% أبطأ من  for...of

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

  • 0

في الحقيقة، الـ for...of loop و forEach() method تؤديان نفس الغرض العام، وهو تكرار عناصر مجموعة معينة والقيام بإجراء معين عليها.

ومع ذلك، يوجد بعض الفروق الدقيقة بينهما:

  • ترتيب التكرار: في for...of loop، يتم تكرار العناصر بالترتيب الذي تم إدخالها في المصفوفة أو في أي مجموعة أخرى تم تمريرها إلى الحلقة، بينما في forEach() method لا يوجد ترتيب محدد لتكرار العناصر.
  • قابلية التحكم في الحلقة: يمنح لنا for...of loop القدرة على التحكم في عملية التكرار بطريقة أكبر من forEach() method، حيث يمكننا استخدام break أو continue لإيقاف الحلقة أو الانتقال إلى العنصر التالي على الرغم من أن ذلك غير ممكن في forEach().
  • القدرة على استخدام الـ return statement: يمكن استخدام الـ return statement في for...of loop لإيقاف الحلقة وإرجاع قيمة معينة، بينما لا يمكن استخدامه في forEach() method.
  • العناصر الفارغة: يتجاهل forEach() method العناصر الفارغة (undefined) في المصفوفة، بينما يتضمن for...of loop تكرارها كأي عنصر آخر.

يمكن استخدام for...of loop في حالات التحكم في الحلقة أو العمل مع ترتيب العناصر المحدد، في حين يمكن استخدام forEach() method في حالات التعامل مع العناصر دون الحاجة إلى التحكم في الحلقة.

سأقدم لك بعض الأمثلة البسيطة لاستخدام كل من for...of loop و forEach() method لتوضيح الفرق بينهما:

مثال على for...of loop:

let names = ["Ali", "Ahmed", "Omar", "Fatima"];

for(let name of names) {
  console.log(name);
}

// Output:
// Ali
// Ahmed
// Omar
// Fatima

في هذا المثال، تم استخدام for...of loop لتكرار جميع العناصر في مصفوفة الأسماء names وطباعتها. يتم تكرار العناصر في الترتيب الذي تم إدخاله في المصفوفة.

مثال على forEach() method:

let numbers = [1, 2, 3, 4];

numbers.forEach(function(number) {
  console.log(number);
});

// Output:
// 1
// 2
// 3
// 4

في هذا المثال، تم استخدام forEach() method لتكرار جميع الأرقام في مصفوفة numbers وطباعتها. يتم تكرار العناصر دون الحاجة إلى التحكم في الحلقة. يتم تجاهل العناصر الفارغة في المصفوفة.

مثال على استخدام break مع for...of loop:

let numbers = [1, 2, 3, 4];

for(let number of numbers) {
  if(number === 3) {
    break;
  }
  console.log(number);
}

// Output:
// 1
// 2

في هذا المثال، تم استخدام for...of loop لتكرار جميع الأرقام في مصفوفة numbers وطباعتها، ولكن تم استخدام break لإيقاف الحلقة عندما يتم الوصول إلى الرقم 3.

مثال على استخدام الـ return statement مع for...of loop:

let numbers = [1, 2, 3, 4];

for(let number of numbers) {
  if(number === 3) {
    return "تم العثور على الرقم 3";
  }
  console.log(number);
}

// Output:
// 1
// 2

في هذا المثال، تم استخدام for...of loop لتكرار جميع الأرقام في مصفوفة numbers وطباعتها، ولكن تم استخدام الـ return statement لإيقاف الحلقة وإرجاع النص.

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

  • 0

المعلومات السابقة صحيحة وشاملة بشكل عام، ولكن هناك بعض النقاط الإضافية التي يمكن تذكرها:

  1. بينما يمكن استخدام for loop لأي نوع من الأشياء التي يمكن تكرارها، إلا أن foreach يستخدم عادةً لتكرار عناصر المصفوفة أو الكائنات القابلة للتكرار مثل سلاسل النصوص (strings) ومجموعات العناصر (sets) وغيرها.
  2. في حالة تغيير المحتوى الموجود في المصفوفة أثناء استخدام foreach، فلن يتم تحديثها بشكل صحيح، بينما يمكن استخدام for loop لتغيير قيم المصفوفة بشكل صحيح.
  3. يمكن استخدام for loop لعمل تكرارات غير متساوية، بمعنى أن يمكن استخدام تعليمة break و continue للخروج من التكرارات أو تخطي جزء منها، بينما لا يمكن استخدام هذه التعليمات في foreach.
  4. يمكن استخدام for loop لتكرار أرقام محددة من المرات وليس فقط عناصر في مصفوفة، بينما يتم استخدام foreach فقط لتكرار عناصر المصفوفة أو الكائنات القابلة للتكرار.
  5. في بعض الحالات، يمكن استخدام for-of loop بدلاً من foreach لتكرار عناصر المصفوفة أو الكائنات القابلة للتكرار. ولكن يتم استخدام for-of loop بشكل أساسي في ECMAScript 6 وما بعده، بينما foreach يدعمها أيضًا ECMAScript 5 والإصدارات السابقة.

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...