مكرر (معلوماتية)

N write.svg
تعرَّف على طريقة التعامل مع هذه المسألة من أجل إزالة هذا القالب.هذه مقالة غير مراجعة. ينبغي أن يزال هذا القالب بعد أن يراجعها محرر مغاير للذي أنشأها؛ إذا لزم الأمر فيجب أن توسم المقالة بقوالب الصيانة المناسبة. يمكن أيضاً تقديم طلب لمراجعة المقالة في الصفحة المُخصصة لذلك. (يوليو 2020)

في برمجة الحاسوب، المكرر هو كائن يمكّن المبرمج من اجتياز حاوية معلومات، وخاصة القوائم. [1] [2] [3] غالبًا ما يتم توفير أنواع مختلفة من المكررات عبر الواجهة البينية للحاوية. على الرغم من أن الواجهة البينية ودلالات مكرر معين ثابتة، إلا أنه يتم تنفيذ التكرارات غالبًا من حيث الهياكل الكامنة وراء تنفيذ الحاوية وغالبًا ما تقترن بإحكام بالحاوية لتمكين الدلالات التشغيلية للمكرر. يقوم المكرر بالانتقال ويعطي أيضًا الوصول إلى عناصر البيانات في الحاوية، لكنه لا يقوم بنفسه بالتكرار (أي ليس من دون بعض الحرية الكبيرة التي تم أخذها بهذا المفهوم أو مع الاستخدام البسيط للمصطلحات). المكرر مشابه سلوكيًا لمؤشر قاعدة البيانات. ترجع المكررات إلى لغة برمجة CLU في عام 1974.

بلغات برمجةعدل

جافاعدل

تم تقديم Iterator في إصدارJDK 1.2 جافا Iterator تسمح واجهة java.util.Iterator بالتكرار على أصناف الحاويات البيانية. كل مكرر Iterator يوفرطريقة المكرر-التالي Iterator.next() والمكرر-هل يوجد تالي Iterator.hasNext() ، ويمكن أن يتم دعم طريقة المكرر-حذفIterator.remove()اختياريا . يتم إنشاء عوامل التكرار حسب صنف الحاوية التالية، عادةً باستخدام طريقة تسمى iterator() . [4]

تقدم الطريقة next() المكرر التالي وتقدم القيمة التي يشير إليها المكرر. يتم الحصول على العنصر الأول عند المكالمة الأولى إلى next() . لتحديد وقت زيارة جميع العناصر الموجودة في الحاوية ، يتم استخدام طريقة الاختبار hasNext() . يوضح المثال التالي استخدامًا بسيطًا للمكررات:

Iterator iter = list.iterator();
//Iterator<MyType> iter = list.iterator(); in J2SE 5.0
while (iter.hasNext()) {
  System.out.print(iter.next());
  if (iter.hasNext())
    System.out.print(", ");
}

لإظهار أنه يمكن استدعاء hasNext() بشكل متكرر ، نستخدمه لإدراج فواصل بين العناصر ولكن ليس بعد العنصر الأخير.

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

بالنسبة لأنواع المجموعات التي تدعمها ، تقوم طريقة remove() للمكرر بإزالة العنصر الذي تمت زيارته مؤخرًا من الحاوية مع إبقاء المكرر صالحًا للاستخدام. إضافة عناصر أو إزالتها عن طريق استدعاء طرق الحاوية (أيضًا من نفس الخيط ) تجعل المكرر غير قابل للاستخدام. محاولة الحصول على العنصر التالي تثير الاستثناء. يتم طرح استثناء أيضًا إذا لم يعد هناك عناصر متبقية (قام hasNext() بإرجاع خطأ سابقًا).

بالإضافة إلى ذلك ، بالنسبة لـ java.util.List java.util.List هناك java.util.ListIterator java.util.ListIterator مع واجهة برمجة تطبيقات مماثلة ولكنها تسمح بالتكرار java.util.ListIterator ، وتوفر فهرسها الحالي في القائمة وتسمح بإعداد عنصر القائمة في موضعه.

و J2SE إطلاق سراح 5.0 جاوة عرض Iterable اجهة لدعم تعزيز for ( foreach ) حلقة لبالتكرار عبر مجموعات والمصفوفات. يعرّف Iterable طريقة يمكن تكراره-مكرر Iterable.iterator() التي تُرجع مكرر Iterator . باستخدام حلقة العبارة for ، المثال السابق يمكن إعادة كتابة كما يلي

for (MyType obj : list) {
  System.out.print(obj);
}

تستخدم بعض الحاويات أيضًا فئة Enumeration القديمة (منذ 1.0). يوفر hasMoreElements() و nextElement() ولكن ليس لديه طرق لتعديل الحاوية.

بيثونعدل

التكرار في بايثون جزء أساسي من اللغة وفي كثير من الحالات لا يُرى حيث يتم استخدامها بشكل ضمني في العبارة for ( foreach ) وفي فهم القائمة وفي تعبيرات المولد . تدعم جميع أنواع المجموعات المدمجة القياسية في بايثون التكرار ، بالإضافة إلى العديد من الفئات التي تعد جزءًا من المكتبة القياسية. يوضح المثال التالي التكرار الضمني النموذجي عبر تسلسل:

for i in fibonacci().skip(4).take(4) {
  println!("{}", i);
}

انظر أيضًاعدل

المراجععدل

  1. ^ Gatcomb, Joshua. "Understanding and Using Iterators". Perl.com. مؤرشف من الأصل في 16 يونيو 2005. اطلع عليه بتاريخ 08 أغسطس 2012. A user-defined iterator usually takes the form of a code reference that, when executed, calculates the next item in a list and returns it. When the iterator reaches the end of the list, it returns an agreed-upon value. الوسيط |CitationClass= تم تجاهله (مساعدة)
  2. ^ Watt, Stephen M. "A Technique for Generic Iteration and Its Optimization" (PDF). The University of Western Ontario, Department of Computer Science. مؤرشف من الأصل (PDF) في 16 سبتمبر 2006. اطلع عليه بتاريخ 08 أغسطس 2012. Iterators were introduced as constructs to allow looping over abstract data structures without revealing their internal representation. الوسيط |CitationClass= تم تجاهله (مساعدة)
  3. ^ Alex Allain. "STL Iterators". Cprogramming.com - Your resource for C and C++. مؤرشف من الأصل في 23 سبتمبر 2017. اطلع عليه بتاريخ 08 أغسطس 2012. You can think of an iterator as pointing to an item that is part of a larger container of items. الوسيط |CitationClass= تم تجاهله (مساعدة)
  4. ^ "java.util: Interface Iterator<E>: Method Summary". Oracle. مؤرشف من الأصل في 28 أبريل 2020. اطلع عليه بتاريخ 08 أغسطس 2012. الوسيط |CitationClass= تم تجاهله (مساعدة)

روابط خارجيةعدل