تمرين - إنشاء وتكوين حلقات التكرار
- 14 دقائق
على السطح، العبارة for عبارة تكرار أخرى تسمح لك بالتكرار من خلال كتلة التعليمات البرمجية وبالتالي تغيير تدفق تنفيذ التعليمات البرمجية الخاصة بك. ومع ذلك، بمجرد أن نفحص كيفية عمل كل منها، يمكننا تحديد الفروق الدقيقة لكل عبارة تكرار ومتى نستخدمها بشكل أفضل.
ما هي العبارة for ؟
تتكرر for العبارة من خلال كتلة التعليمات البرمجية لعدد معين من المرات. يجعل هذا المستوى من التحكم العبارة for فريدة من نوعها بين عبارات التكرار الأخرى.
foreach تتكرر العبارة من خلال كتلة من التعليمات البرمجية مرة واحدة لكل عنصر في تسلسل بيانات مثل صفيف أو مجموعة.
while تتكرر العبارة من خلال كتلة من التعليمات البرمجية حتى يتم استيفاء شرط.
علاوة على ذلك، تمنحك العبارة for المزيد من التحكم في عملية التكرار عن طريق الكشف عن شروط التكرار.
في هذا التمرين، ستستخدم العبارة for ، وتعلم كيفية التحكم في الشرط المسبق للتكرار، وحالة الإكمال، ونمط التكرار الخاص به والمزيد. ستتعرف أيضا على حالات الاستخدام الشائعة للبيان for .
حسنا، الآن دعونا نعد بيئة الترميز الخاصة بنا ونبدأ فحصنا لعينات التعليمات البرمجية التي تنفذ عبارة for .
إعداد بيئة الترميز الخاصة بك
تتضمن هذه الوحدة أنشطة عملية ترشدك خلال عملية إنشاء التعليمات البرمجية التوضيحية وتشغيلها. نحن نشجعك على إكمال هذه الأنشطة باستخدام Visual Studio Code كبيئة التطوير الخاصة بك. سيساعدك استخدام Visual Studio Code لهذه الأنشطة على أن تصبح أكثر راحة في كتابة التعليمات البرمجية وتشغيلها في بيئة مطور يستخدمها المحترفون في جميع أنحاء العالم.
فتح Visual Studio Code.
يمكنك استخدام القائمة Windows (أو مورد مكافئ لنظام تشغيل آخر) لفتح Visual Studio Code.
في قائمة Visual Studio Code File ، حدد Open Folder.
في مربع الحوار فتح مجلد ، انتقل إلى مجلد سطح مكتب Windows.
إذا كان لديك موقع مجلد مختلف حيث تحتفظ بمشاريع التعليمات البرمجية، يمكنك استخدام موقع المجلد هذا بدلا من ذلك. لهذا التدريب، الشيء المهم هو أن يكون لديك موقع يسهل تحديد موقعه وتذكره.
في مربع الحوار فتح مجلد ، حدد تحديد مجلد.
إذا رأيت مربع حوار أمان يسألك عما إذا كنت تثق بالمؤلفين، فحدد نعم.
في قائمة Visual Studio Code Terminal ، حدد New Terminal.
لاحظ أن موجه الأوامر في لوحة Terminal يعرض مسار المجلد للمجلد الحالي. على سبيل المثال:
C:\Users\someuser\Desktop>إشعار
إذا كنت تعمل على جهاز الكمبيوتر الخاص بك بدلا من بيئة الاختبار المعزولة أو البيئة المستضافة وأكملت وحدات Microsoft Learn الأخرى في سلسلة C# هذه، فربما تكون قد أنشأت بالفعل مجلد مشروع لعينات التعليمات البرمجية. إذا كان الأمر كذلك، يمكنك تخطي الخطوة التالية، والتي تستخدم لإنشاء تطبيق وحدة تحكم في مجلد TestProject.
في موجه الأوامر Terminal، لإنشاء تطبيق وحدة تحكم جديد في مجلد محدد، أدخل المطالبة التالية:
dotnet new console -o ./CsharpProjects/TestProjectيستخدم أمر .NET CLI هذا قالب برنامج .NET لإنشاء مشروع تطبيق وحدة تحكم C# جديد في موقع المجلد المحدد. ينشئ الأمر مجلدات CsharpProjects وTestProject نيابة عنك، ويستخدم TestProject كاسم لملفك
.csproj.إذا تم عرض رسالة تخبرك بأن الملفات موجودة بالفعل، فتابع الخطوات التالية. ستقوم بإعادة استخدام ملفات المشروع الموجودة.
في طريقة عرض EXPLORER، قم بتوسيع المجلد CsharpProjects .
يجب أن تشاهد مجلد TestProject وملفين، ملف برنامج C# المسمى Program.cs وملف مشروع C# يسمى TestProject.csproj.
في قائمة Visual Studio Code File ، حدد Open Folder.
في مربع الحوار فتح مجلد ، حدد المجلد CsharpProjects ، ثم حدد تحديد مجلد.
في طريقة عرض EXPLORER، قم بتوسيع المجلد TestProject، ثم حدد Program.cs.
حذف أسطر التعليمات البرمجية الموجودة.
ستستخدم مشروع وحدة تحكم C# هذا لإنشاء نماذج التعليمات البرمجية وبنائها وتشغيلها أثناء هذه الوحدة النمطية.
أغلق لوحة Terminal.
كتابة عبارة أساسية ل
تأكد من فتح Visual Studio Code وعرضه Program.cs في لوحة المحرر.
إشعار
يجب أن يكون Program.cs فارغا. إذا لم يكن كذلك، فحدد كافة أسطر التعليمات البرمجية واحذفها.
اكتب التعليمات البرمجية التالية في محرر التعليمات البرمجية Visual Studio.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }تقدم هذه التعليمة البرمجية عبارة بسيطة
forتتكرر عبر كتلة التعليمات البرمجية الخاصة بها 10 مرات، وتطبع القيمة الحالية لi.في قائمة Visual Studio Code File ، حدد Save.
يجب حفظ ملف Program.cs قبل إنشاء التعليمات البرمجية أو تشغيلها.
في لوحة EXPLORER، لفتح Terminal في موقع مجلد TestProject، انقر بزر الماوس الأيمن فوق TestProject، ثم حدد Open in Integrated Terminal.
سيتم فتح لوحة Terminal. يجب أن تتضمن المحطة الطرفية موجه أوامر يظهر أن المحطة الطرفية مفتوحة لموقع مجلد TestProject.
في موجه الأوامر Terminal، لتشغيل التعليمات البرمجية، اكتب dotnet run ثم اضغط على Enter.
إشعار
إذا رأيت رسالة تقول "تعذر العثور على مشروع لتشغيله"، فتأكد من أن موجه الأوامر Terminal يعرض موقع مجلد TestProject المتوقع. على سبيل المثال:
C:\Users\someuser\Desktop\csharpprojects\TestProject>يجب أن ترى الناتج التالي.
0 1 2 3 4 5 6 7 8 9خذ دقيقة لتحديد الأجزاء الستة من
forالبيان.forتتضمن العبارة الأجزاء الستة التالية:- الكلمة الأساسية
for. - مجموعة من الأقواس التي تحدد شروط
forالتكرار. تحتوي الأقواس على ثلاثة أجزاء مميزة، مفصولة بنهاية عامل تشغيل العبارة، فاصلة منقوطة. - يحدد الجزء الأول متغير المكرر ويهيئه. في هذا المثال:
int i = 0. يشار إلى هذا القسم باسم المهيئ. - يحدد الجزء الثاني شرط الإكمال. في هذا المثال:
i < 10. بمعنى آخر، سيستمر وقت التشغيل في التكرار عبر التعليمات البرمجية في كتلة التعليمات البرمجية أسفل العبارةforبينماiيكون أقل من10. عندماiيصبح مساويا ل10، يتوقف وقت التشغيل عن تنفيذ كتلة التعليمات البرمجيةforللبيانات. تشير المستندات إلى هذا القسم على أنه الشرط. - يحدد الجزء الثالث الإجراء الذي يجب اتخاذه بعد كل تكرار. في هذه الحالة، بعد كل تكرار،
i++سيؤدي إلى زيادة قيمة بمقدارi1. تشير المستندات إلى هذا القسم على أنه المكرر. - وأخيرا، كتلة التعليمات البرمجية. تحتوي كتلة التعليمات البرمجية على التعليمات البرمجية التي سيتم تنفيذها لكل تكرار. لاحظ أنه تتم الإشارة إلى قيمة
iداخل كتلة التعليمات البرمجية. تشير المستندات إلى هذا القسم على أنه النص الأساسي.
نظرا لقواعد تسمية المتغيرات، قد تتساءل عما إذا كان
iاسما صالحا للمتغير الذي يحتوي على التكرار الحالي. في هذه الحالة،iيعتبر معظم صالحا. الخيارات الشائعة الأخرى هيxوcounter. يتم استخدام الاسمjأيضا في هذه الحالات عندما يكون لديك عبارة خارجيةforتستخدمi، وتحتاج إلى إنشاء متغير تكرار لبيان داخليfor.إشعار
جميع الأقسام الثلاثة (المهيئ والشرط والمكرر) اختيارية. ومع ذلك، في الممارسة العملية، عادة ما يتم استخدام جميع الأقسام الثلاثة.
- الكلمة الأساسية
تغيير شروط التكرار
وكما ذكرنا في البداية، فإن for البيان له صفتان فريدتان بين بيانات التكرار.
-
forيجب استخدام العبارة عندما تعرف عدد المرات التي تحتاج إلى تكرارها من خلال كتلة من التعليمات البرمجية مسبقا. -
forتسمح لك العبارة بالتحكم في الطريقة التي تتم بها معالجة كل تكرار.
ماذا لو كنا بحاجة إلى التكرار من خلال كتلة من التعليمات البرمجية، ولكن نريد العد التنازلي بدلا من العد لأعلى؟
استخدم محرر Visual Studio Code لتحديث التعليمات البرمجية الخاصة بك كما يلي:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }خذ دقيقة لمراجعة التعليمات البرمجية المحدثة.
من خلال تغيير الأجزاء الثلاثة من العبارة
for، نقوم بتغيير سلوكها.- نقوم بتهيئة متغير التكرار إلى 10.
- نقوم بتغيير شرط الإكمال للخروج من العبارة
forعندماiيكون أقل من0. - نقوم بتغيير نمط المكرر للطرح
1منiكل مرة نكمل فيها التكرار.
احفظ ملف التعليمات البرمجية، ثم استخدم Visual Studio Code لتشغيل التعليمات البرمجية الخاصة بك.
أدخل
dotnet runمن موجه الأوامر Terminal لتشغيل التعليمات البرمجية الخاصة بك.لاحظ أن الإخراج قد تغير.
عند تشغيل التعليمات البرمجية، سترى الإخراج التالي.
10 9 8 7 6 5 4 3 2 1 0
تجربة نمط المكرر
ماذا لو أردنا تخطي قيم معينة في متغير المكرر؟
استخدم محرر Visual Studio Code لتحديث التعليمات البرمجية الخاصة بك كما يلي:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }خذ دقيقة لمراجعة التعليمات البرمجية المحدثة.
بدلا من زيادة قيمة متغير المكرر أو إنقاصها بواسطة
1، نستخدمi += 3لتخطي قيمتين بعد كل تكرار.احفظ ملف التعليمات البرمجية، ثم استخدم Visual Studio Code لتشغيل التعليمات البرمجية الخاصة بك.
أدخل
dotnet runمن موجه الأوامر Terminal لتشغيل التعليمات البرمجية الخاصة بك.لاحظ كيف تغير الإخراج.
عند تشغيل التعليمات البرمجية، سترى الإخراج التالي.
0 3 6 9من المسلم به أنك لن تفعل هذا النوع من الأشياء في كثير من الأحيان، ولكن نأمل أن تتمكن من تقدير أن لديك مستوى دقيقا من التحكم في التكرارات إذا كنت بحاجة إليها من أي وقت مضى.
استخدام الكلمة الأساسية الفاصلة لكسر عبارة التكرار
ماذا لو كنا بحاجة إلى الخروج من بيان التكرار قبل الأوان بناء على بعض الشروط؟ يمكننا استخدام break الكلمة الأساسية .
استخدم محرر Visual Studio Code لتحديث التعليمات البرمجية الخاصة بك كما يلي:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }خذ دقيقة لمراجعة استخدام الكلمة الأساسية في التعليمات البرمجية
breakالمحدثة.رأينا
breakأولا الكلمة الأساسية في الوحدة النمطية "فرع تدفق التعليمات البرمجية باستخدام بنية حالة التبديل في C#". كما اتضح، يمكننا استخدامbreakالكلمة الأساسية للخروج من عبارات التكرار أيضا.احفظ ملف التعليمات البرمجية، ثم استخدم Visual Studio Code لتشغيل التعليمات البرمجية الخاصة بك.
أدخل
dotnet runمن موجه الأوامر Terminal لتشغيل التعليمات البرمجية الخاصة بك.لاحظ كيف تغير الإخراج.
عند تشغيل التعليمات البرمجية، سترى الإخراج التالي.
0 1 2 3 4 5 6 7
التكرار الحلقي عبر كل عنصر من عناصر الصفيف
الاستخدام الشائع للبيان for هو التكرار من خلال صفيف من العناصر، خاصة إذا كنت بحاجة إلى بعض التحكم في الطريقة التي يحدث بها التكرار. بينما foreach يتكرر من خلال كل عنصر من عناصر الصفيف، يمكن تعديل العبارة for لتوفير المزيد من التخصيصات.
استخدم محرر Visual Studio Code لتحديث التعليمات البرمجية الخاصة بك كما يلي:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }خذ دقيقة لمراجعة التعليمات البرمجية المحدثة.
أولا، لاحظ أننا قمنا بإنشاء مثيل صفيف سلسلة يسمى
namesيحتوي على أربعة أسماء.بعد ذلك، لاحظ أننا نستخدم الخاصية
Array.Lengthللحصول على عدد العناصر في الصفيف، وأننا نستخدم هذه القيمة لتهيئة متغير التكرار (int i = names.Length - 1). نطرح 1 من القيمة لأن رقم الفهرس لعناصر الصفيف يستند إلى الصفر (أرقام الفهرس للعناصر الأربعة هي 0-3).وأخيرا، لاحظ أننا اخترنا التكرار من خلال الصفيف للخلف - شيء لا يمكننا القيام به مع العبارة
foreach. نستخدم قيمة متغير التكرار داخل كتلة التعليمات البرمجية لتحديد رقم فهرس عناصر الصفيف (names[i]).احفظ ملف التعليمات البرمجية، ثم استخدم Visual Studio Code لتشغيل التعليمات البرمجية الخاصة بك.
أدخل
dotnet runمن موجه الأوامر Terminal لتشغيل التعليمات البرمجية الخاصة بك.لاحظ أن عناصر الصفيف مدرجة بترتيب عكسي (كما ننوي).
عند تشغيل التعليمات البرمجية، سترى الإخراج التالي.
Michael David Eddie Alexإشعار
كان من الممكن أن نكرر إلى الأمام من خلال عناصر الصفيف عن طريق إنشاء العبارة
forكما يلي:for (int i = 0; i < names.Length; i++).
فحص قيود عبارة foreach
ماذا لو كنت تريد تحديث قيمة في الصفيف أثناء foreach التكرار؟
استخدم محرر Visual Studio Code لتحديث التعليمات البرمجية الخاصة بك كما يلي:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }احفظ ملف التعليمات البرمجية، ثم استخدم Visual Studio Code لتشغيل التعليمات البرمجية الخاصة بك.
أدخل
dotnet runمن موجه الأوامر Terminal لتشغيل التعليمات البرمجية الخاصة بك.لاحظ رسالة الخطأ التي يتم عرضها.
إذا حاولت تحويل هذه التعليمة البرمجية برمجيا وتشغيلها، فسترى استثناء.
Cannot assign to name because it is a 'foreach iteration variable'بمعنى آخر، لا يمكنك إعادة تعيين قيمة
nameلأنها جزء منforeachالتنفيذ الداخلي للتكرار.
التغلب على قيود عبارة foreach باستخدام عبارة for
لنحاول استخدام عبارة for لتعديل محتويات صفيف داخل كتلة التعليمات البرمجية للتكرار.
استخدم محرر Visual Studio Code لتحديث التعليمات البرمجية الخاصة بك كما يلي:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) if (names[i] == "David") names[i] = "Sammy"; foreach (var name in names) Console.WriteLine(name);خذ دقيقة لمراجعة التعليمات البرمجية المحدثة.
لاحظ أننا أزلنا الأقواس المتعرجة من كتل التعليمات البرمجية التي تحتوي على سطر واحد فقط من التعليمات البرمجية. تستخدم هذه المراجعة نفس التقنية التي تحدثنا عنها في الوحدة النمطية "التحكم في نطاق المتغير والمنطق باستخدام كتل التعليمات البرمجية في C#". يجد العديد من المطورين صعوبة في قراءة هذا النمط، بينما يفضل آخرون هذا النمط المختصر لأنه يساعدهم على الكتابة بإيجاز وتعبير أكثر. إذا وجدت صعوبة في قراءة هذه التعليمات البرمجية، أو إذا كنت لا تفضل هذا النمط، فتأكد من أنه يمكن دائما استخدام الأقواس المتعرجة في كتل التعليمات البرمجية الخاصة بك. إذا أردت، فقم بتحديث التعليمات البرمجية في لوحة المحرر بالتعليمات البرمجية التالية:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) { if (names[i] == "David") { names[i] = "Sammy"; } } foreach (var name in names) { Console.WriteLine(name); }احفظ ملف التعليمات البرمجية، ثم استخدم Visual Studio Code لتشغيل التعليمات البرمجية الخاصة بك.
أدخل
dotnet runمن موجه الأوامر Terminal لتشغيل التعليمات البرمجية الخاصة بك.لاحظ أن التعليمات البرمجية تعمل دون خطأ وتنشئ الإخراج المطلوب.
عند تشغيل التعليمات البرمجية، سترى الإخراج التالي.
Alex Eddie Sammy Michaelنظرا لأن الصفيف ليس جزءا مباشرة من تنفيذ عبارة التكرار، يمكنك تغيير القيم داخل الصفيف.
خلاصة
فيما يلي بعض الوجبات الجاهزة من هذه الوحدة:
-
forتسمح لك عبارة التكرار بالتكرار من خلال كتلة من التعليمات البرمجية لعدد معين من المرات. -
forتسمح لك عبارة التكرار بالتحكم في كل جانب من جوانب ميكانيكا التكرار عن طريق تغيير الشروط الثلاثة داخل الأقواس: المهيئ والشرط والمكرر. - من الشائع استخدام العبارة
forعندما تحتاج إلى التحكم في كيفية تكرار كل عنصر في صفيف. - إذا كانت كتلة التعليمات البرمجية الخاصة بك تحتوي على سطر واحد فقط من التعليمات البرمجية، يمكنك إزالة الأقواس المتعرجة والمسافة البيضاء إذا كنت ترغب في ذلك.