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

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

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

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

تقدم الطريقة `next()` المكرر التالي وتقدم القيمة التي يشير إليها المكرر. يتم الحصول على العنصر الأول عند المكالمة الأولى إلى `next()` . لتحديد وقت زيارة جميع العناصر الموجودة في الحاوية ، يتم استخدام طريقة الاختبار `hasNext()` . يوضح المثال التالي استخدامًا بسيطًا للمكررات: 
```java
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()` بإرجاع خطأ سابقًا).

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

و J2SE إطلاق سراح 5.0 جاوة عرض  اجهة لدعم تعزيز `for` ( foreach ) حلقة لبالتكرار عبر مجموعات والمصفوفات. يعرّف `Iterable` طريقة يمكن تكراره-مكرر  التي تُرجع مكرر `Iterator` . باستخدام حلقة العبارة `for` ، المثال السابق يمكن إعادة كتابة كما يلي 
```java
for (MyType obj : list) {
  System.out.print(obj);
}
```
 تستخدم بعض الحاويات أيضًا فئة `Enumeration` القديمة (منذ 1.0). يوفر `hasMoreElements()` و `nextElement()` ولكن ليس لديه طرق لتعديل الحاوية.

### بيثون
التكرار في بايثون جزء أساسي من اللغة وفي كثير من الحالات لا يُرى حيث يتم استخدامها بشكل ضمني في العبارة `for` ( foreach ) وفي فهم القائمة وفي تعبيرات المولد . تدعم جميع أنواع المجموعات المدمجة القياسية في بايثون التكرار ، بالإضافة إلى العديد من الفئات التي تعد جزءًا من المكتبة القياسية. يوضح المثال التالي التكرار الضمني النموذجي عبر تسلسل: 
```rust
for i in fibonacci().skip(4).take(4) {
  println!("{}", i);
}
```


## انظر أيضًا

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

## المراجع

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

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

تصنيف:تكرار في برمجة
تصنيف:كائن (علوم الحاسوب)