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

بلغات برمجة
-----------

### جافا

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

تقدم الطريقة `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);
}

```

انظر أيضًا
----------

* Iteratee ، حيث ، بدلاً من استدعاء المطور للمكرر بشكل متكرر للحصول على قيم جديدة ، يتم استدعاء iteratee بشكل متكرر لمعالجة أجزاء جديدة من البيانات - مثال على عكس التحكم .
* نمط التصميم
* تكرار
* نمط المكرر
* نطاق
* المؤشر (برمجة الكمبيوتر)

المراجع
-------

1. ↑  Gatcomb، Joshua. "Understanding and Using Iterators". Perl.com. مؤرشف من الأصل في 2020-07-08. اطلع عليه بتاريخ 2012-08-08. 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.`{{استشهاد ويب}}`: صيانة CS1: BOT: original-url status unknown (link)
2. ↑  Watt، Stephen M. "A Technique for Generic Iteration and Its Optimization". The University of Western Ontario, Department of Computer Science. مؤرشف من الأصل في 2020-06-13. اطلع عليه بتاريخ 2012-08-08. Iterators were introduced as constructs to allow looping over abstract data structures without revealing their internal representation.`{{استشهاد ويب}}`: صيانة CS1: BOT: original-url status unknown (link)
3. ↑  Alex Allain. "STL Iterators". Cprogramming.com - Your resource for C and C++. مؤرشف من الأصل في 2017-09-23. اطلع عليه بتاريخ 2012-08-08. You can think of an iterator as pointing to an item that is part of a larger container of items.
4. ↑  "java.util: Interface Iterator<E>: Method Summary". Oracle. مؤرشف من الأصل في 2020-04-28. اطلع عليه بتاريخ 2012-08-08.

روابط خارجية
------------

* وأوضح متكرر جافا ، Iterable و ListIterator
*. واجهة NET
* مقال "فهم واستخدام المتكررين "جوشوا جاتكومب
* مقال "تقنية التكرار العام وتحسينه "(217 كيلوبايت) بقلم ستيفن م. وات
* المكرر
* تعزيز مكتبة التكرار C ++
* واجهة جافا
* PHP: تكرار الكائن
* مكرر STL
* ما هي التكرارات؟ - وصف مرجعي

|  |
| --- |
| **مكرر** في المشاريع الشقيقة: |
|  | 
* صور وملفات صوتية من كومنز.
 |

* أيقونة بوابةبوابة علم الحاسوب