امروز از سری مقالات تیک4 قصد داریم شما را بیشتر با حلقه ها در جاوا اسکریپت آشنا کنیم. باما همراه باشید…
مفهوم حلقه: از ساختار دستوری حلقه ها در جاوا اسکریپت ، برای اجرای مجوعه ای از دستور العمل ها به تعداد دفعات مورد نیاز یا تا زمانی که یک شرط خاص درست باشد ، استفاده می شود.
در حلقه ، هنگامی که مجموعه دستورات حلقه به طور کامل اجرا می شود، برنامه دوباره به ابتدای مجموعه دستورات حلقه رفته و در صورت برقرار بودن شرط حلقه ، یکبار دیگر دستورات آن به طور کامل اجرا خواهد کرد.
به طور کلی ۲ نوع حلقه در جاوا اسکریپت داریم:
حلقه for: در این نوع حلقه ، مجموعه دستورالعمل ها به تعداد معلوم و مورد نیاز ، تکرار خواهد شد.
حلقه while: در این حالت ، دستورالعمل های حلقه تا زمانی که شرط تعیین شده برای آن درست باشد ، مجددا اجرا خواهد شد.
در ادامه به بررسی انواع حلقه های مورد استفاده در جاوا اسکریپت می پردازیم . در لیست زیر حلقه های معرفی شده در این قسمت قرار دارند . برای دریافت اعلاعات درباره هر کدام ، بر روی آن کلیک کنید:
for
while
do … while
for … in
۱ ) حلقه for:
از حلقه for، زمانی استفاده می شود که می خواهیم مجموعه دستورالعمل های حلقه به تعداد دفعات معینی انجام شود.
این حلقه در هنگام تعریف ۳ پارامتر اصلی دارد:
مقدار اولیه متغیر : به وسیله این مقدار ، مقدار اولیه برای شروع شمارنده حلقه تعیین می شود.
عبارت کنترلی : در این قسمت یک عبارت کنترلی مرتبط با شمارنده حلقه تعیین می شود ، که در هر بار اجرای مجدد حلقه ، شرط عبارت کنترل شده و در صورت برقرار بودن شرط ، دستورات حلقه اجرا می شود.
گام افزایش یا کاهش : در این قسمت ، میزانی که متغیر شمارنده حلقه ، در هر بار اجرای دستورات آن افزایش یا کاهش می یابد را تعیین می کنیم.
نحوه عملکرد این حلقه به صورت زیر است:
در این حلقه ، از یک متغیر به عنوان شمارنده یا کنترل کننده حلقه استفاده می شود . این متغیر در ابتدای اجرای حلقه ، مقدار دهی اولیه شده و اجرای مجدد حلقه با یک عبارت شرطی کنترل شده که در صورت درست بودن شرط ، دستورات حلقه یکبار اجرا می شود و با هر بار اجرای حلقه متغیر حلقه به اندازه گام تعیین شده ، افزایش یا کاهش می یابد.
شکل کلی تعریف یک حلقه for به صورت زیر است:
for ( گام افزایش یا کاهش ; تعیین عبارت کنترلی ; تعیین مقدار اولیه متغیر )
{
دستورات بدنه حلقه
}
نکته: از ۳ پارامتر اصلی حلقه for ، فقط تعیین عبارت کنترلی در هنگام تعریف حلقه اجباری بوده و می توان متغیر شمارنده حلقه را قبل از تعریف حلقه مقدار دهی کرد و همچنین گام افزایش یا کاهش را در بدنه دستورات تابع قرار داد . در این صورت می توان جای موارد فوق را در تعریف حلقه خالی گذاشت.
مثال: در مثال زیر یک حلقه ساده در اسکریپت زیر ایجاد شده است . شمارنده این حلقه که متغیری به نام n است با مقدار اولیه ۱ مقدار دهی شده و شرط حلقه کوچکتر یا مساوی بودن شمارنده حلقه از ۵ تعیین شده است . گام افزایش این حلقه نیز ۱+ در نظر گرفته شده است . این حلقه در هر بار اجرا مقدار متغیر n را بر روی صفحه چاپ می کند . به خروجی آن دقت کنید:
< script type="text/javascript" > var n ; for ( n = 1 ; n <= 5 ; n++ ) { document.write ("Line number is " + n + "<br />") ; } < /script >
مثال ۲: همانطور که گفتیم می توان قسمت پارامترهای مقدار اولیه و گام افزایش یا کاهش را در یک حلقه for خالی گذاشته و مقدار اولیه را قبل از تعریف حلقه و گام حلقه را در درون بلاک کد حلقه تعیین کرد . مثال شماره ۱ را به این صورت نیز می توان نوشت:
< script type="text/javascript" > var n = 1; for ( ; n <= 5 ; ) { document.write ("Line number is " + n + "<br />") ; n++ ; } < /script >
نکته و مثال ۳: گام یک حلقه می تواند منفی یا کاهشی نیز باشد . در مثال زیر شمارنده حلقه با هر بار اجرای حلقه یک واحد کاهش می یابد:
< script type="text/javascript" > var n ; for ( n = 5 ; n >= 1 ; n-- ) { document.write ("Line number is " + n + "<br />") ; } < /script >
یک برنامه کاربردی:
در این قسمت یک برنامه ساده را با جاوا اسکریپت طراحی کرده ایم . این برنامه از طریق ۲ کادر متن ، دو عدد را به عنوان ورودی دریافت کرده و عدد اول را به توان عدد دوم می رساند.
توضیح : در ابتدا یک متغیر به نام sum برای نگهداری جواب را با مقدار اولیه ۱ تعریف می کنیم . سپس مقدار کادر اول در متغیر n و مقدار کادر دوم را در متغیر i ذخیره می کنیم . از عدد دوم به عنوان شمارنده حلقه استفاده شده که با هر بار اجرای حلقه ، عدد اول یکبار در خود ضرب شده و یک واحد از شمارنده حلقه نیز کم می شود ، تا به ۱ برسد . در این حالت اجرای حلقه متوقف شده و نتیجه خروجی بر روی صفحه چاپ می شود:
< script type="text/javascript" > function multiple ( ) { var sum = 1 ; var n = Num1.value ; for ( var i = Num2.value ; i > 0 ; i-- ) { sum = sum * n ; } document.write ( sum ) ; } < /script > < input type="text" id="Num1" /> < input type="text" id="Num2" /> < input type="button" id="Btnclick" value=" Click for Multipe" onclick="multiple( )" / >
حلقه while در جاوا اسکریپت:
از حلقه while در جاوا اسکریپت ، برای اجرای دستورالعمل های مورد نظر تا زمانی که شرط یا شروط تعیین شده برای حلقه درست باشند ، استفاده می شود.
در این حالت ، ابتدا شرط حلقه در مقابل کلمه کلیدی while تعریف می شود . در هر بار اجرای حلقه ، برنامه شرط یا شروط حلقه را چک کرده و در صورت بر قرار بودن آن ، دستورالعمل های حلقه را یکبار اجرا کرده و مجددا به ابتدای حلقه باز می گردد.
در حلقه while نیز می توان از یک متغیر برای کنترل اجرای حلقه استفاده کرد . در صورت استفاده از یک متغیر شمارنده ، باید گام افزایش یا کاهش متغیر در بدنه دستورات حلقه تعریف شود و در صورت عدم استفاده از یک متغیر کنترلی ، باید شرط حلقه در ادامه به نحوی نقض شود وگرنه حلقه به صورت بی نهایت ادامه می یابد.
شکل کلی تعریف یک حلقه while به صورت زیر است:
while ( شرط یا شروط حلقه )
{
دستوراالعمل های مورد نظر حلقه
}
مثال: مثال اول قسمت آموزش حلقه for را در اینجا با حلقه while باز نویسی کرده ایم . در این حلقه از متغیر n به عنوان متغیر شمارنده و کنترل کننده حلقه استفاده شده است . اجرای حلقه تا زمانی که شرط آن درست است ، ادامه دارد:
< script type="text/javascript" > var n = 1 ; تعریف و مقدار دهی متغیر کنترلی حلقه while ( n <= 5 ) { document.write ("Line number is " + n + "<br />") ; n++ ; گام افزایشی متغیر کنترلی حلقه } < /script >
مثال ۲: در این مثال برنامه کاربردی که یک عدد را به توان عدد دیگری می رساند را که با حلقه for نوشته بودیم ، را با حلقه while باز نویسی کرده ایم . به تفاوت های این دو ساختار دقت کنید :
< script type="text/javascript" > function multiple ( ) { var sum = 1 ; var n = Num1.value ; var i = Num2.value ; while ( i > 0 ) { sum = sum * n ; i-- ; } document.write ( sum ) ; } < /script > < input type="text" id="Num1" /> < input type="text" id="Num2" /> < input type="button" id="Btnclick" value=" Click for Multipe" onclick="multiple( )" / >
حلقه do … while :
ساختار حلقه do … while ، دقیقا همانند حلقه while است ، با این تفاوت که شرط حلقه do … while در انتهای حلقه تعریف و کنترل می شود . به عبارت دیگر در این حلقه ابتدا یکبار دستورات حلقه اجرا شده و در آخر شرط حلقه برای اجرای مجدد ، کنترل می شود که در صورت درست بودن یکبار دیگر دستورات آن خواهد شد.
مزیت این حلقه نسبت به حلقه while این است که ، در حلقه while در صورت عدم برقراری شرط حلقه دستورات آن هیچگاه اجرا نخواه شد . اما در حلقه do … while، حتی در صورت غلط بودن و عدم برقراری شرط حلقه ، دستورات آن حداقل یکبار اجرا خواهد شد.
شکل کلی تعریف یک حلقه do … while به صورت زیر است:
do
{
دستورات حلقه
}
while ( شرط یا شروط حلقه )
مثال: مثال اول قسمت آموزش حلقه while را در اینجا با حلقه do … while باز نویسی کرده ایم . در این حلقه از متغیر n به عنوان متغیر شمارنده و کنترل کننده حلقه استفاده شده است . اجرای حلقه تا زمانی که شرط آن درست است ، ادامه دارد:
< script type="text/javascript" > var n = 1 ; تعریف و مقدار دهی متغیر کنترلی حلقه do { document.write ("Line number is " + n + "<br />") ; n++ ; گام افزایشی متغیر کنترلی حلقه } while ( n <= 5 ) < /script >
مثال: در مثال زیر یک حلقه do … while تعریف شده که شرط اجرای دستورات آن کوچکتر بودن متغیر c از ۵ است . اما قبل از حلقه متغیر c با مقدار ۸ مقدار دهی شده است . می بینیم که با وجود اشتباه بودن و عدم برقراری شرط حلقه دستورات آن حداقل یکبار اجرا شده و خروجی تولید کرده است ، ولی سری دوم اجرای حلقه به دلیل عدم برقراری شرط آن اجرا نشده است:
< script type="text/javascript" > var c = 8 ; تعریف و مقدار دهی متغیر کنترلی حلقه do { document.write ("Line number is " + c + "<br />") ; c++ ; } while ( c <= 5 ) < /script >
حلقه for…in در جاوا اسکریپت:
از حلقه for … in در جاوا اسکریپت ، برای حرکت در درون اعضای یک آرایه یا مجموعه خواص یک شی استفاده می شود . به ازای خواندن هر یک از اعضا آرایه یا یکی از خواص شی مورد نظر ، یکبار دستورات درون حلقه اجرا خواهد شد.
تعداد دفعات تکرار دستورات حلقه ، برابر با تعداد اعضای آرایه و یا تعداد خواص شی مورد نظر است . در این حلقه معمولا از یک متغیر به عنوان شمارنده یا اندیس آرایه استفاده می شود.
شکل کلی تعریف یک حلقه for…in به صورت زیر است:
for ( متغیر in نام یک آرایه / مجموعه خواص یک شی )
{
دستورات بدنه حلقه
}
مثال: در مثال زیر ابتدا یک آرایه به نام Lesson برای نگهداری نام دروس کامپیوتر با ۵ عضو ایجاد و مقدار دهی شده است . وظیفه حلقه for…in حرکت در درون اعضای آرایه Lesson و چاپ نام تک تک آنها به عنوان خروجی است . به کد مثال دقت کنید:
< script type="text/javascript" > var n = 0 ; var i = 1 ; var Lessons = new Array( 5 ) ; Lessons[0] = "HTML" ; Lessons[1] = "CSS" ; Lessons[2] = "Visual Basic" ; Lessons[3] = "Java Script" ; Lessons[4] = "ASP.NET" ; for ( n in Lessons ) { document.write ( "Lesson " + i + " = " + Lessons [n] + "<br / >") ; i++ ; } < /script >
– یک مثال مرتبط با دستور continue و حلقه for…in
مثال: فرض کنید که در مثال بالا فقط می خواهیم نام دروسی از آرایه Lesson چاپ شود ، که شماره اندیس آنها در آرایه زوج باشد . بنابراین در بدنه دستورات حلقه یک دستور continue با این شرط که باقی مانده حاصل از تقسیم شماره اندیس آرایه بر ۲ برابر صفر نباشد را به قبل از دستور چاپ حلقه اضافه می کنیم . در این صورت نام اعضایی از آرایه که شماره اندیس آنها فرد است چاپ نمی شود و حلقه به اندیس بعدی می رود:
< script type="text/javascript" > var n = 0 ; var i = 1 ; var Lessons = new Array( 5 ) ; Lessons[0] = "HTML" ; Lessons[1] = "CSS" ; Lessons[2] = "Visual Basic" ; Lessons[3] = "Java Script" ; Lessons[4] = "ASP.NET" ; for ( n in Lessons ) { if ( n % 2 != 0 ) continue ; document.write ( "Lesson " + i + " = " + Lessons [n] + "<br / >") ; i++ ; } < /script >