پرش به مطلب اصلی

حلقه تکرار

معرفی

زبان Wave برای مواقعی که نیاز به اجرای مکرر یک کد دارید، حلقه‌ها را ارائه می‌دهد. حلقه‌ها زمانی استفاده می‌شوند که نیاز به اجرای مکرر کد بر اساس شرایط خاص یا تعداد مشخصی باشد.

بنابراین می‌توانید بدون نیاز به نوشتن مجدد همان منطق، عملیات تکراری را با کدی واضح و مختصر بیان کنید. Wave هم تکرار مبتنی بر شرط و هم تکرار مبتنی بر تعداد را پشتیبانی می‌کند و همچنین کلمات کلیدی برای کنترل جریان در طول تکرار ارائه می‌دهد.

در این بخش نحوه استفاده از حلقه‌های while و for و همچنین کلمات کلیدی break و continue برای کنترل جریان تکرار توضیح داده می‌شود.


حلقه while

حلقه while کد را در حالی تکرار می‌کند که شرط داده شده برابر با true باشد. وقتی شرط برابر با false شود، تکرار خاتمه می‌یابد.

این روش برای زمانی که تعداد تکرار مشخص نیست و باید تا زمانی که شرط خاصی برقرار باشد تکرار شود، مناسب است.

ساختار پایه

ساختار پایه حلقه در Wave به صورت زیر است.

while (شرط) {
// کدی که باید تکرار شود
}

شرط باید حتماً به نوع bool ارزیابی شود و درون بلوک کدی که با {} محصور شده، می‌توانید یک یا چند دستور بنویسید.

مثال: چاپ از ۰ تا ۴

var i :i32 = 0;

while (i < 5) {
println("i برابر است با {}.", i);
i = i + 1;
}

در این مثال، در حالی که مقدار متغیر i کمتر از 5 است، حلقه اجرا می‌شود. در هر تکرار، مقدار فعلی را چاپ می‌کند و مقدار i را یک واحد افزایش می‌دهد تا شرط در نهایت غلط (false) شود.


حلقه for

حلقه for برای مواقعی که تعداد تکرار نسبتاً مشخص است، مناسب است. می‌توانید مقدار اولیه، شرط و افزایش را یکجا تعریف کرده و جریان تکرار را به‌وضوح بیان کنید.

با جمع‌آوری تمام اجزای مورد نیاز برای کنترل حلقه در یک مکان، ساختار حلقه به راحتی قابل درک است.

ساختار پایه

for (var نام_متغیر: نوع = مقدار_اولیه; شرط; عبارت_افزایش) {
// کدی که باید تکرار شود
}

آغاز کردن حلقه در Wave از انواع مختلفی پشتیبانی می‌کند.

  • شروع با نوع var به صورت ضمنی
  • آغاز با اعلان var / let mut / const
  • آغاز با عبارت معمولی (استفاده مجدد از متغیر موجود)

مثال 1: به سرع آغاز با نوع ضمنی

for (i :i32 = 1; i <= 5; i += 1) {
println("i = {}", i);
}

مثال 2: آغاز به وسیله var / let mut

for (دvar i: i32 = 0; i < 3; i += 1) {
println("var i = {}", i);
}

for (let mut j: i32 = 0; j < 3; j += 1) {
println("let mut j = {}", j);
}

مثال 3: آغاز بر مبنای عبارت (استفاده مجدد از متغیر موجود)

var i: i32 = 99;

for (i = 3; i <= 5; i += 1) {
println("i = {}", i);
}

println("بعد از حلقه: {}", i); // 6

آغاز با اعلان (var, let mut, i :i32 = ...) به عنوان متغیر محلی حلقه عمل می‌کند, اما آغاز بر مبنای عبارت (i = ...) متغیر خارجی را به‌روزرسانی می‌کند.


حلقه تو در تو

می‌توانید درون یک حلقه دیگر حلقه‌ای بنویسید که به آن حلقه تو در تو می‌گویند. حلقه‌های تو در تو برای پیمایش ساختارهای داده دو بعدی یا پردازش ترکیب‌های مختلف از شرایط مفید هستند.

مثال: حلقه while دو تایی

var i :i32 = 0;

while (i < 3) {
var j :i32 = 0;

while (j < 2) {
println("i={}, j={}", i, j);
j = j + 1;
}

i = i + 1;
}

در این مثال، هر بار که حلقه بیرونی while یک بار اجرا می‌شود، حلقه درونی while به‌طور کامل اجرا می‌شود. با این کار می‌توانید ترکیبات به شکل (i, j) را به‌صورت متوالی پردازش کنید.


حلقه break

حلقه break به محض خروج حلقه را خاتمه می‌دهد. وقتی که دیگر نیازی به ادامه تکرار نباشد، استفاده می‌شود.

مثال: خاتمه تکرار در یک مقدار خاص

var i :i32 = 0;

while (true) {
if (i == 5) {
break;
}

println(i);
i = i + 1;
}

در این مثال، زمانی که i در یک حلقه بی‌نهایت به ۵ می‌رسد، دستور break اجرا می‌شود و حلقه خاتمه می‌یابد. به این ترتیب، دستور break زمانی مفید است که بخواهید کنترل تکرار را جدا از شرایط تکرار بدست آورید.


حلقه continue

دستور continue بقیه کد در حال اجرا را نادیده می‌گیرد و مستقیماً تکرار بعدی را آغاز می‌کند. در مواقعی که می‌خواهید فقط بخشی از منطق را در یک شرط خاص نادیده بگیرید، استفاده می‌شود.

مثال: فقط اعداد زوج را چاپ کنید.

for (var i: i32 = 0; i <= 10; i = i + 1) {
if (i % 2 == 1) {
continue;
}

println(i);
}

در این کد، در صورتی که i فرد باشد، دستور continue اجرا شده و بخش چاپ نادیده گرفته می‌شود. در نتیجه، فقط مقادیر زوج چاپ می‌شوند.


خلاصه

حلقه‌های Wave طوری طراحی شده‌اند که بتوانند به صورت طبیعی تکرارهای مبتنی بر شرط و تعداد را بیان کنند. دستور while برای تکرارهای مبتنی بر شرط مناسب است و دستور for زمانی مفید است که تعداد تکرار و جریان مشخص باشد.

با استفاده از break و continue به طور همزمان، می‌توانید حین تکرار کنترل دقیق‌تری بر جریان اجرا داشته باشید و از این طریق منطق تکرار دقیق‌تر و انعطاف‌پذیرتری بسازید.