در تمام زبانهای برنامه نویسی دستوراتی وجود دارند که به برنامه نویس اجازه انجام چندبارهی یک رویداد یا یک شرط را میدهند،این کدها حلقههای For-Loop نام دارند،این حلقهها با کلیدواژهی for (به معنای "برای") ساخته میشوند،و اشاره به تکرار یک قطعه کد دارد،برای یادگیری حلقهها در زبان برنامهنویسی سویفت در ادامه، همراه باشید.
در زبان سویفت دو حالت کلی برای تعریف حلقهی تکرار وجود دارد:
حلقه تکرار For-in: تکرار رویدادی را تا تمام شدن یک دنباله از دستورات اجرا میکند.{دنباله دستورات،میتواند بررسی تمام خانههای یک آرایه باشد.}
حلقه تکرار For: تکرار رویدادی را تا رسیدن به شرطی خاص ادامه میدهد و معمولا تعداد تکرار دستورات توسط یک شمارنده به اتمام میرسد.{مانند نوع سنتی حلقه های for که در زبان C بسیار کاربرد دارد.}
نکته: حلقه های تکرار For-in حالت هوشمندی از نوع سنتی حلقهها به شمار میرود که در زبان برنامه نویسی Swift یک مزیت بزرگ حساب میشود.
آشنایی بیشتر با حلقههای For-in در مثالهای زیر:
٭ تمامی کدها و مثال ها را می توانید در بخش playground تست کنید.
for index in 1...5 { print("\(index) times 5 is \(index * 5)") } // OutPut: خروجی // 1 times 5 is 5 // 2 times 5 is 10 // 3 times 5 is 15 // 4 times 5 is 20 // 5 times 5 is 25
در مثال بالا ابتدا با استفاده از کلیدواژهی for ساخت حلقه تکرار را شروع کردیم،سپس شمارندهای به نام index ساختیم که بتواند تعداد تکرار حلقه را ذخیره و با "عدد" تکرار حلقه، برای خروجی اعمالی را انجام دهد(در دستور ()print این شمارنده کاربرد دارد)،سپس عبارت in را نوشته،که به مقدار رِنج تکرار حلقه اشاره دارد،حال نوبت به تعداد تکرار میرسد, در این مثال تکرار ما از عدد ۱ تا ۵ میباشد،در آخر نیز کروشه باز "}" و دستوری که میخواهیم در هر بار تکرار حلقه اجرا شود را مینویسیم (در این مثال دستور ()print پنج بار تکرار میشود) و کروشه "{" را میبندیم.در بخش OutPut خروجی این حلقه را مشاهده میکنید.
برای درک بهتر مثال بعدی را قدم به قدم تریس "Trace" میکنیم.
نکته: تریس کردن،یک اصتلاح برنامه نویسی است،زمانی یک قطعه کد را تریس میکنیم که بخواهیم قدم به قدم کدها را بررسی و نتایج هر قطعه کد و یا مقدار متغیر ها را مشاهده کنیم،این کار به منظور درک بهتر از برنامه نویسی در آموزش،همچنین به منظور بررسی (ردیابی کردن) یک رویداد خطا صورت میپذیرد.
مثال زیر را با هم تریس میکنیم تا متوجه کارکرد حلقه For-in و تفسیر کامپایلر از حلقه ها،در طول اجرا بشویم:
٭ تمامی کدها و مثال ها را می توانید در بخش playground تست کنید.
let names = ["Anna", "Alex", "Brian", "Jack"] for name in names { print("Hello, \(name)!") } // OutPut: خروجی // Hello, Anna! // Hello, Alex! // Hello, Brian! // Hello, Jack!
در مثال بالا ابتدا آرایه ای از اسامی اشخاصی ساختیم،سپس حلقه ی تکرار با کلیدواژهی for ساخته میشود،اگر به صورت عامیانه حلقه بالا را بخواهیم تفسیر کنیم این جمله مناسب است:
(برای "نام" در "نامها" تکرار کن...). یعنی ابتدا متغیر name به خانه ی اول آرایه names اشاره میکند و مقدار آنرا به خاطر میسپارد،سپس دستور پرینت، خروجی مناسب با مقدار متغیر name را چاپ میکند :
Hello, Anna!
باز این چرخه تکرار میشود،چرا که بررسی و چاپ تمامی نامها که در خانه های آرایه names قرار دارند شرط پایان حلقه میباشد.پس اینبار متغیر name به خانهی دوم آرایه و مقدار Alex اشاره میکند،وارد دستور پرینت شده و مقدار زیر چاپ میشود:
Hello, Alex!
مجددا متغیر name به خانه ی بعد و مقدار Brain اشاره میکند و آنرا برای چاپ ذخیره میکند،سپس وارد حلقه شده و دستور پرینت، خروجی بعدی را چاپ میکند:
Hello, Brian!
و در آخر نیز رشته حروف Jack در متغیر name ذخیره و در خروجی با دستور ()print چاپ میشود:
Hello, Jack!
در مثالهای بالا از رنج اعداد (۵...۱) برای تکرار و همچنین از شرط پایان آرایه نیز برای تعداد تکرار حلقه ها استفاده کردیم،اما میتوانیم شرط را در زمان ساخت حلقه درون for قرار دهیم،به مثال زیر توجه کنید:
for character in "Hello" { print(character) } // OutPut: // H // e // l // l // o
همانطور که متوجه شدید در این مثال شمارندهی character وظیفه دارد تک تک حروف رشتهی Hello را ذخیره و در دستور پرینت آنها را برای خروجی آماده چاپ کند.در جلسات بعد نوع دوم و سنتی حلقه های for را آموزش خواهیم داد و مثالهای بیستری را حل خواهیم کرد.
جواب چالش جلسه قبل:
let Array:[AnyObject] = [ let name-Old:[String:Int] = ["Ali":28, "Reza":32, "Hamid":20], let id-Grade:[Int:Double] = [100:17.75, 101:18.25, 102:15.75], let name-Present:[String:Bool] = ["Reza":true, "Hamid":false, "Ali":true] ]
- یادآوری:دوستان عزیزی که ابتدا پست های جدید رو مطالعه میکنند،توجه کنید که برای دیدن پست های قبلی و ابتدای این دوره آموزشی، باید به پایینی ترین پست مراجعه کنید و به صفحات قبل برگردید،چرا که ترتیب کلاسها بسیار حائز اهمیت است .