درس هفتم- حلقهها
در این درس میخواهیم با یکی از مهمترین مفاهیم برنامه نویسی یعنی «حلقهها» آشنا شویم. بطور کل «حلقه» در تمام زبانهای برنامه نویسی استفاده میشود و یکی از پر کاربردترین مفاهیم برنامه نویسی است. جاوا اسکریپت هم مانند دیگر زبانها از این فن استفاده میکند، اگر پیش از این تجربه برنامه نویسی با زبانهای دیگر را داشته باشید دانستن این درس برایتان بسیار ساده خواهد بود. اگر این نخستین باریست که اقدام به یادگیری زبان برنامه نویسی کردهاید نگران نباشید زیرا این بخش علیرغم مهم بودن بسیار ساده و شیرین است.
حلقه در جاوا اسکریپت
حلقه، همانطور که از نامش پیداست به مجموعهای از عملها گفته میشود که در آنها تکرار وجود داشته باشد. فرض کنید که میخواهید از شماره یک تا پنج را در مرورگر نمایش دهید. این اتفاق با استفاده از حلقه میسر میشود. یعنی شما پنج بار به مرورگر دستور چاپ عدد میدهید. در صورتی که از حلقه استفاده نکنیم باید دستور چاپ عددها را پنج بار بنویسیم اما با بکارگیری فن حلقه، ما هر پنج عدد را فقط با یک مجموعه کد چاپ میکنیم. حال فرض کنید میخواهید که صد عدد را چاپ کنید، دیگر نوشتن کدهای چاپ عددها برای صدبار منطقی به نظر نمیآید. پس یادگیری و بکارگیری مفهوم حلقه به ما در نوشتن کدهایی ساده و کوتاه در هنگام نیاز به انجام عملی برای چندین بار کمک بسیار میکند. جاوا اسکریپت از چندین نوع شیوه پیاده سازی «حلقه» حمایت میکند.
حلقه For
for یکی از رایجترین و پرکاربردترین ابزار حلقه است، این دستور مجموعهای از دستورات را به تعداد «دفعات مشخصی» تکرار میکند. عبارت «دفعات مشخصی» در جمله پیشین بسیار حایز اهمیت است، این عبارت یعنی ما میدانیم که حلقه ما به چه تعداد دفعه تکرار خواهد شد. همانطور که پیش از این گفتیم حلقه را در زمان تکرار کدهایی بکار میگیریم پس وقتی که میدانیم یک مجموعه کد را میخواهیم برای تعداد دفعات مشخصی اجرا کنیم از این نوع حلقه بهره میبریم.
ساختار کلی حلقه for به شکل زیر است:
for ( شمارنده ; شرط ; گام حلقه )
{
اجرا کنیم کدهایی که می خواهیم برای تعداد دفعات مشخص
}
در داخل پرانتز بعد از کلمه for سه جمله تعیین کننده شمارنده، شرط و گام حلقه وجود دارند که به شرح زیر میباشند:
- شمارنده
شمارنده یک متغیر است که برای آغاز کردن حلقه به آن نیاز داریم پس ابتدا آن را تعریف میکنیم. این شمارنده ابتدای حلقه را مشخص میکند بطور نمونه تعیین میکند که حلقه از ۰ شروع شود یا از ۱. شما میتوانید شمارنده را هر عددی که خواستید انتخاب کنید.
نکته: شمارنده میتواند خارج از حلقه هم تعریف شود.
- شرط حلقه
شرط حلقه، شرطی است که وضعیت حلقه را تعیین میکند. در اصل این بخش شرط پایان یافتن حلقه را مشخص میکند. یعنی با توجه به شمارنده که آغاز کننده حلقه است، شرط حلقه زمان پایان یافتن آن را تعیین میکند. حلقه تا زمانی که شرط درست باشد تکرار میشود و به محض نادرست بودن شرط متوقف میشود.
- گام حلقه
این جمله وظیفه افزایش یا کاهش شمارنده را بر عهده دارد. در اصل این عبارت گام حرکت حلقه را کنترل میکند.
کل روند اجرایی حلقه به زبان ساده میشود: یک متغیر تعیین کن (شمارنده)، تا زمانی که شرط درست است حلقه را تکرار کن (شرط حلقه) و شمارنده را زیاد کن (گام حلقه).
نکته: گام حلقه میتواند بسته به آغاز حلقه (شمارنده) مثبت یا منفی باشد. اگر شما شمارنده را از عدد کوچک شروع کنید (بطور نمونه ۱) و بخواهید که حلقه ۵ بار تکرار شود، گام حلقه باید مثبت باشد تا شرط پایان حلقه محقق گردد. اما زمانی که شما شمارنده را از عدد بزرگتر شروع کنید (برای نمونه ۶) برای تکرار پنج باره حلقه میتوانید گام را منفی در نظر بگیرید. در زیر با نوشتن نمونههایی این حالات را بررسی میکنیم.
فرض کنید با استفاده از این فن میخواهیم از شماره ۱ تا ۵ را در مرورگر چاپ کنیم. شیوه نگارش این حلقه با گام مثبت به ترتیب زیر است:
<!DOCTYPE html>
<html>
<body>
<script>
for ( var i=1 ; i <6 ; i++)
{
document.write(i + "<br />");
}
</script>
</body>
</html>
در نمونه بالا شمارنده متغیری با مقدار ۱ است و شرط حلقه تا زمانی که این عدد کوچکتر از ۶ یعنی ۵ باشد درست است. گام حلقه متغیر را یکی یکی افزایش میدهد (گام مثبت) و حلقه تا زمانی که شمارنده به عدد ۵ برسد تکرار و کدهای داخل بلوک حلقه اجرا میشود. توضیح ساده حلقه میشود: شمارنده را عدد «۱» در نظر بگیر و تا زمانی که کوچکتر از «۶» است یکی به آن اضافه کن.
حلقه چاپ ۵ عدد با گام منفی:
<!DOCTYPE html>
<html>
<body>
<script>
for ( var i = 5 ; i > 0 ; i --)
{
document.write(i + "<br />");
}
</script>
</body>
</html>
تفاوت این حلقه با حلقه پیشین در اینست که اینجا گام حلقه منفی است. با توجه با اینکه شمارنده را عدد ۵ گرفتهایم و میخواهیم این کدها ۵ بار تکرار شود، گام را یکی یکی کاهش داده تا شرط حلقه نادرست شود و حلقه پایان پذیرد. این حلقه به زبان ساده میگوید: شمارنده را ۵ در نظر بگیر و تا زمانی که بزرگتر از ۰ است یکی از آن کم کن.
حلقه for/in
این نوع حلقه برای جستجو در مقادیر یک آبجکت یا آرایه استفاده میشود. در درسهای بعدی بیشتر به این نوع حلقهها خواهیم پرداخت. در اینجا با اجرای یک نمونه، تنها به آن اشارهای کوتاه خواهیم کرد تا شما با این نوع حلقه هم آشنایی مختصری پیدا کنید.
<!DOCTYPE html>
<html>
<body>
<script>
var person={fname:"پیمان",lname:"ایرانی",age:25};
for (x in person)
{
document.write( person[x] + "<br />");
}
</script>
</body>
</html>
در این نمونه ابتدا یک آبجکت تعریف کرده، مقادیری را در آن ریخته و با استفاده از این نوع حلقه به تمام مقادیر آن دسترسی و آنها را چاپ کردهایم.
حلقه While
در تعریف حلقه for گفتیم که تعداد دفعات تکرار حلقه مشخص است اما زمانی که تعداد تکرار حلقه مشخص نباشد چه؟ پاسخ این پرسش اینست که وقتی تعداد تکرار حلقه مشخص نباشد میتوانیم از حلقه While استفاده کنیم. این نوع حلقه مانند حلقه for مجموعهای از کدها را تکرار میکند و این شرط حلقه است که پایان آن را تعیین میکند. در ساختار حلقه While درست مانند حلقه for به سه بخش شمارنده، شرط و گام نیازمندیم اما با این تفاوت که محل قرار گیری این سه بخش جابجا میشود.
تعریف شمارنده
while (شرط)
{
بلوک کدها برای اجرا
گام حلقه
}
همانطور که میبینید «شمارنده» پیش از حلقه تعریف و عبارت while عبارتی کلیدی است که در این نوع حلقه استفاده میشود. در جلوی این عبارت (داخل پرانتز) شرط پایان حلقه قرار دارد و گام حلقه در داخل بلوک حلقه قرار میگیرد.
<!DOCTYPE html>
<html>
<body>
<script>
i = 1; شمارنده //
while ( i < 6)
{
document.write( i + "<br />");
i++;
}
</script>
</body>
</html>
در نمونه بالا شرط پایان حلقه کوچکتر بودن شمارنده از شرط (عدد ۶) است. نکتهای که باید در این نوع حلقه فراموش نکنیم، افزایش یا کاهش گام حلقه (i++) در داخل بلوک کدهاست. همانطور که گفتیم این نوع حلقه دارای یک شرط پایان است اما نباید فراموش کنیم که این گام حلقه است که شرایط پایان حلقه را با افزایش یا کاهش شمارنده فراهم میکند. پس در این نوع حلقه هم به یک شمارنده، یک شرط و یک گام حرکت نیاز داریم.
حلقه Do/While
Do/While نوعی دیگر از حلقه While است با این تفاوت که در این نوع حلقه پیش از بررسی شرط، بلوک کدها یکبار اجرا میشود. پس از آن تا زمانی که شرط درست باشد حلقه تکرار شده و کدها اجرا میشوند. عبارت مورد استفاده در این نوع حلقه Do و While است بهمراه شرطی که در مقابل While داخل پرانتز نوشته میشود.
do
{
کدها برای اجرا
}
while (شرط);
در نمونه زیر چاپ اعداد ۱ تا ۵ با استفاده از حلقه Do/While صورت میگیرد.
<!DOCTYPE html>
<html>
<body>
<script>
i = 1;
do
{
document.write( i + "<br />");
i++;
} while (i < 6) ;
</script>
</body>
</html>
همانطور که در نمونه بالا پیداست ابتدا شمارنده یا متغیر i تعریف شده و بعد حلقه با کمک کلمه do آغاز میشود. سپس اجرای حلقه برای یکبار صورت گرفته و گام حلقه یک عدد افزایش مییابد، در خط آخر هم شرط حلقه (while (i < 6)) بررسی میشود. این اتفاق تا زمانی که شرط درست است تکرار میشود.