فصل پنجم: حلقه های تکرار

07 شهریور 1397
es6-loops

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

تصویر زیر انواع حلقه ها را نمایش می دهد.

انواع حلقه ها در اکما اسکریپت

حلقه های معین

حلقه هایی که تعداد پیمایش های آن مشخص یا ثابت باشد را حلقه های معین می گویند.

حلقه for یک پیاده سازی از حلقه های معین است.

for (initial_count_value; termination-condition; step) { 
   //statements
}
# حلقه معین توضیحات
1 حلقه for حلقه تکرار به تعداد دفعاتی که در حلقه مشخص می شود، دستورات خاصی را اجرا می کند
2 حلقه for…in حلقه تکرار به تعداد دفعاتی که در حلقه مشخص می شود، دستورات خاصی را اجرا می کند
3 حلقه for…of این حلقه از یک iterable به جای یک شی برای پیمایش استفاده می کند

حلقه for

حلقه for به تعداد دفعاتی که یک حلقه مشخص می شود، دستورات خاصی را اجرا می کند. همچنین می تواند برای پیمایش در بین یک مجموعه ای از مقادیر مانند آرایه ها، مورد استفاده قرار بگیرد. مثال زیر سینتکس آن را نشان می دهد

var num = 5 
var factorial = 1; 
for( let i = num ; i >= 1; i-- ) { 
   factorial *= i ; 
} 
console.log(factorial);

حلقه for سه بخش دارد: مقداردهی اولیه (i=num)، شرط (i>=1) و عبارت نهایی (i--)

برنامه فاکتوریل عدد 5 را محاسبه و آنرا در خروجی نمایش می دهد.حلقه for اعداد 5 تا 1 را تولید کرده و در هر بار پیمایش حلقه، ضرب آن در عنصر قبلی را حساب می کند.

با استفاده از عملگر کاما (،) چندین نسبت دهی و عبارت نهایی، می تواند در یک حلقه for ترکیب شود.

برای مثال، حلقه for زیر هشت عدد اول سری فیبوناچی را چاپ می کند.

"use strict" 
for(let temp, i = 0, j = 1; j<30; temp = i, i = j, j = i + temp) 
console.log(j);

خروجی

1 
1 
2 
3 
5 
8 
13 
21

حلقه for…in

حلقه for…in برای پیمایش در میان ویژگی های یک آبجکت مورد استفاده قرار می گیرد.

سینتکس حلقه for…in

for (variablename in object) {  
   statement or block to execute  
}

در هر پیمایش، یک ویژگی آبجکت به variableName نسبت داده می شود و این حلقه تا زمان تمام شدن ویژگی های آبجکت به کار خود ادامه می دهد.

مثال

var obj = {a:1, b:2, c:3};  
for (var prop in obj) { 
   console.log(obj[prop]); 
}

در مثال بالا پیمایش یک آبجکت توسط حلقه for…in  را نشان دادیم.خروجی مطابق زیر است:

1 
2 
3

حلقه for…of

این حلقه برای پیمایش یک iterable مورد استفاده قرار می گیرد. سینتکس حلقه for…of مطابق زیر است:

for (variablename of object) {  
   statement or block to execute  
}

مثال

for (let val of[12 , 13 , 123]) {   
   console.log(val) 
}

خروجی

12 
13 
123

حلقه های نامعین

حلقه نامعین موقعی استفاده می شود که تعداد پیمایش در یک حلقه نامشخص یا تعریف نشده باشد.

انواع حلقه های نامعین در جدول زیر آمده است:

# حلقه های نامعین توضیحات
1 حلقه  while حلقه while یک سری دستورات را تا زمانی که نتیجه شرط مشخص شده برای آن، درست (true) باشد اجرا می شود.
2 حلقه do…while حلقه do…while همانند حلقه while است با این تفاوت که حلقه do…while در پیمایش اول خود هیچ شرطی را ارزیابی نمی کند و همواره اجرا می شود.

 

حلقه while

حلقه while یک دستور را تا زمانی که نتیجه شرط مشخص شده برابر درست (true) باشد، اجرا می کند.

فلوچارت

فلوچارت حلقه while در اکما اسکریپت

سینتکس حلقه while

while (expression) {  
   Statement(s) to be executed if expression is true  
}

مثال

var num = 5; 
var factorial = 1; 

while(num >= 1) { 
   factorial = factorial * num; 
   num--; 
} 
console.log("The factorial  is "+factorial);

کد بالا از یک حلقه while برای محاسبه فاکتوریل متغیر num استفاده می کند.

خروجی بالا

The factorial is 120

حلقه do…while

حلقه do…while همانند حلقه های while است، بجز اینکه حلقه do…while برای بار اول اجرای حلقه هیچ شرطی را بررسی نمی کند. و از اجرای دوم به بعد شرط حلقه بررسی می شود.به عبارت دیگر کد موجود در حلقه های do…while حداقل یکبار اجرا می شود.

فلوچارت

حلقه do...while در اکما اسکریپت

سینتکس حلقه های do…while

do {  
   Statement(s) to be executed;  
} 
while (expression);

سمی کولن انتهای حلقه do…while را فراموش نکنید.

مثال

var n = 10;   
do { 
   console.log(n); 
   n--; 
} 
while(n>=0);

این مثال اعداد از 0 تا 10 را بطور معکوس چاپ می کند.

خروجی

10 
9 
8 
7 
6 
5 
4 
3 
2 
1 
0

مثال- حلقه while در برابر do…while

 حلقه do…while

var n = 10; 
do { 
   console.log(n); 
   n--; 
}
while(n>=0);

حلقه while

var n = 10; 
while(n>=0) { 
   console.log(n); 
   n--; 
}

در مثال بالا در صورتی که نتیجه عبارت پاس داده شده به while برابر true باشد، وارد حلقه می شویم. در این مثال، مقدار n کاهش می یابد تا زمانی که به کمتر از صفر برسد. در این موقع نتیجه عبارت شرطی نادرست (false) شده و حلقه اجرا نمی شود.

از طرف دیگر حلقه do…while دستوراتش را حداقل یکبار اجرا می کند. چون در پیمایش اول هیچ شرطی برای آن لحاظ نشده و در اجرای دوم به بعد است که شرط برای آن لحاظ می شود.

دستورات کنترل حلقه

# دستور توضیحات
1 دستور break  استفاده از دستور break کنترل اجرای برنامه را به خارج از حلقه منتقل می کند
2 دستور continue  استفاده از continue باعث می شود از پیمایش جاری صرف نظر شده و کنترل اجرای برنامه به ابتدای حلقه تکرار، منتقل شود

دستور break

باعث می شود برنامه از حلقه تکرار خارج شود.

مثال

var i = 1 
while(i<= 10) { 
   if (i % 5 == 0) {   
      console.log("The first multiple of 5  between 1 and 10 is : "+i) 
      break     //exit the loop if the first multiple is found 
   } 
   i++ 
}

کد بالا اولین مضرب 5 را در محدوده اعداد 1 تا 10 را در خروجی چاپ می کند.

اگر یک عدد پیدا شد که بر 5 بخش پذیر باشد، شرط if اجرا شده و برنامه پس از برخورد با دستور break از حلقه خارج می شود.

خروجی

The first multiple of 5 between 1 and 10 is: 5

دستور continue

بر خلاف دستور break، دستور continue باعث خروج از حلقه نمی شود، بلکه از تکرار (پیمایش) جاری صرف نظر کرده و کنترل اجرای برنامه را به ابتدای حلقه می برد.

مثال

var num = 0 
var count = 0; 
for(num = 0;num<= 20;num++) { 
   if (num % 2 == 0) { 
      continue 
   } 
   count++ 
} 
console.log(" The count of odd values between 0 and 20 is: "+count)

مثال بالا اعداد زوج بین 0 تا 20 را نمایش می دهد.در صورتی که مقدار متغیر num زوج بود   دستور continue اجرا شده و کنترل اجرای  برنامه به ابتدای حلقه می رود

خروجی

The count of odd values between 0 and 20 is: 10
نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

a_bahoush
06 آذر 1397
با سلام برای اولین بار هست من در این سایت چیزی مینویسم اگه تکراری است معلومه دیگران هم همین نظر رو دارن. مطالب شما درباره EC6 جالب است. اما ظاهرا معلوم نیست شما اکما 6 رو درس میدید یا اکما 5 رو یا مخلوط. اگر اکما6 میگید دیگه چرا از var استفاده میکنید و در ضمن مثالهاتون رو در بعضی موارد مثلا حلقه ها یا.. طوری تعریف میکنید که اثری از اکما6 وجود نداره و این باعث سردرگمی میشه . با تشکر

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.