Swift 05 : التكرار (الحلقات loops)

Abatherمنذ 7 سنوات

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

في شرحنا لهذا اليوم سوف نتطرق للتكرار Loops وبالتحديد لـ for and while å

قد تحتاج بعض الأحيان لتكرار code ما لسبب او لآخر بإمكانك ان تعيد كتابته أكثر من مرة 

لنفرض أننا نريد طباعة الآعداد من 0 الى 5 بإمكاننا كتابة الكود التالي:


print(0)
print(1)
print(2)
print(3)
print(4)
print(5)

قد يبدوا هذا الأمر سهلاً للوهلة الأولى لكن ماذا لو آردت أن اطبع من 0 إلى 100 ألن يكون لدي الكثير من السطور المتكررة

وماذا لو كان هناك خطأ ولو في حرف بسيط ألن يتوجب علي أن اعيد كتبابة المئة سطر من جديد؟!

هنا تأتي أهمية الـ loops  فكل ما عليك هو كتابة الكود الرئيسي وعدد المرات اللتي تريد منه تكرارها وهو سيتكرر من تلقاء نفسه. لنفرض أني آريد كتابة حرف الألف 10 مرات (العقاب السابق الذي كنا نتلقاه من مدرسينا):


for i in 0...5 {
   print("أ")
}

هذا الـ code سيقوم بطباعة حرف “أ” خمس مرات لكن ما هي الطريقة؟!

أولا هذا الـ loop من نوع for لأننا كما هو واضح استخدمنا الكلمة الدلالية for في بدايته

إذا تشريح هذا الكود كما التالي:

for: نوع الـ lopp الذي نستخدمه

i : متغير (سنتطرق لإستخداماته فيما يلي)

0..<5 : النطاق ويحمل عدد مرات التكرار اللتي نريدها

وهذه الرموز اللتي تستخدم في النطاق

الرمز

المعنى

مثال

من العدد الأول إلى أن تصل إلى العدد الثاني

05

من الصفر إلى ان تصل إلى 5 ما فوق 5 لا يحسب (عدد مرات التكرار 6)

..<

من العدد الأول إلى ما قبل العدد الثاني

0..<5

من الصفر إلى ما قبل 5 الـ 5 وما بعده لا يحسب (عدد مرات التكرار هنا 5 مرات )

النطاق عبارة عن نوع حاله من حال الـ Int, Doblue, or String بما انه مثيل لهم اذا بكل تأكيد بإمكانك حفظ النطاق داخل متغير كما التالي:

 

المتغير range عبارة عن نطاق يبدأ من 0 وينتهي عن 5 (5 ضمن هذا النطاق) اذا يمكننا تغير كودنا إلى التالي:


var range = 0..<5

قلنا بأننا سنتكلم لاحقا عن المتغير الموجود بـ for والذي هو i بكل بساطة عمل المتغير i هو حمل القيمة داخل النطاق في البداية في مثالنا السابق ستكون قيمته 0 لأن بداية النطاق لدينا من 0 بعد أن ينتهي من أول دورة ويعود لبدأ الدورة الأخرى ستكون قيمته 1 وهكذا حتى يصل إلى نهاية النطاق وفي النهاية ستكون قيمته 4، للتوضيح أكثر لنقوم ببعض التغيرات على مثالنا السابق:


for i in range {
    print(i)
}

من الواضح بأن لدينا تكرار لطباعة المتغير i لكن ماذا سيطبع؟!

بكل تأكيد سيكون كالتالي:

0

1

2

3

4

ماذا لو كان النطاق يبدأ من عدد غير الـ 0؟!


var range = 5...10

for i in range {
    print(i)
}

في هذا المثال لن تكون المخرجات كما السابق لكنها ستكون كالتالي:

5

6

7

8

9

10

لأن النطاق في هذه الحالة لا يبدأ من 0 إنما 5، وكما قلنا فإن المتغير i يأخذ قيمة النطاق.

 

أتمنى بأن يكون السطر الأول من for loop قد اتضح. 

أما بالنسبة لما بين {} فيمكن أن يكون أي كود بالإمكان إنشاء

متغيرات القيام بالعمليات الحسابية أو وضع الجملة الشرطية بل وحتى وضع loop أخرى في داخله.

 

لنفرض أني أريد طباعة الأعداد الزوجية (الأعداد التي تقبل القسمة على 2) داخل نطاق معين؟!

بكل تأكيد بما أني اريد تكرار الطباعة فسوف استخدم loop ولا ننسى بأن هناك شرط آخرى وهو ان يقبل العدد القسمة على 2

في هذه الحالة سيكون لدينا هذا الكود:


var range = 0...10

for i in range {
    if(i % 2 == 0){
        print(i)
    }
}

نطاقنا هنا من 0 إلى 10 (10 ضمن النطاق) وكما نلاحظ فإن داخل loop هناك شرط ألا وهو بأن يكون باقي القسمة يساوي 0 إذا تحقق الشرط سيقوم بطباعة العدد وإلا ينهي هذه الجولة من الـ loop ويدخل في الآخرى. 

في هذه الحالة ستكون المخرجات لدينا كما التالي:

0

2

4

6

8

10

ما هذه الا أمثلة بسيطة للشرح أتمنى أن لا تحصر عقلك بها إنما تبحر بخيالك لكي تستخدمها على أكمل وجه.

هناك نقطة أخيرة بالنسبة للـ for loop خصوصاً لمن لديهم خلفية في لغات برمجة أخرى مثل Java :


for var i = 0 ; i <= 10; i++{
    //your Code
}

هذا النمط  يمكنك استخدامه في Swift حالياً لكنه سيتم التخلص منه في التحديثات القادمة لذلك لم أقم بشرحة.

 

While:


var m = 5

while(m > 0){
    print("True")
    m -= 1
}

هذا هو الشكل العالم للـ while loop تبدأ بالكلمة المفتاحية while ومن بعدها () يجب عليك ان تضع بينهما الشرط الذي في حال تحققه سيستمر التكرار. أما داخل {} فهنا نجد الكود المراد تكراه كما في for loop أما في نهاية الكود (ليس حتما أن يكون في النهاية) فهنا نجد تحديث لقيمة المتغير الذي داخل الشرط فلو ابقينا هذا المتغير ثابت فعندها سنكون في مشكلة لأننا سنواجه عندها تكرار غير منتهي. في كل مرة نقوم بالدخول داخل الـ loop تقل قيمة المتغير m بـ 1 ويتسمر التكرار حتى يكون الـ m أصغر من 0 . لن نطيل في الـ while loop فحالها من حال for لكن الأختلاف فقط في الشرط داخل الـ while وآنه يجب علينا تحديث المتغير.

 

أخطاء شائعة في الـ loop قد تقع بها:

- التكرار الغير منتهي: وتقع عادة في هذا الخطأ القاتل عندما تعطي الـ loop حالة من المستحيل أن تكون خاطئة مثال على ذلك:


var n = 15

while (n > 0){
    print("yes")
     n += 1
}

في هذه الحالة سيستمر البرنامج بتكرار الكود الى مالنهاية (وقد يتسبب في تعطيل البرنامج كما حدث لي الآن ?) لأن المتغير n سيكون دائما أكبر من 0.

أو أن تنسى أن تقوم بتحديث المتغير كما في هذا المثال:


var n = 15

while (n > 0){
    print("yes")
}

 

 - عدد التكرار الخاطأ: دائما ما يكون هناك اخطاء تافهة مثل هذا، فمثلا لو أنك أردت من التكرار أن يتم 10 مرات لكنه يتم 11 مرة أ 9 مرات ونقع في هذا الخطأ عند الخطأ في أعطاء النطاق:


for i in 0..<9 {
  //Your Code
}

سيكون التكرار أقل من المطلوب بخطوة.


for i in 0...10 {
  //Your Code
}

سيكون التكرار أكثر من المطلوب بخطوة.

أتمنى من الله أن أكون أوصلت المعلومة بيسر وسهولة

في حفظ الله

كلمات دليلية:
3
إعجاب
10326
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !