ار این ساختار در زمانی استفاده می شود که بخواهیم بر حسب مقادیر مختلف یک متغیر یا عبارت خاص ، دستورات متفاوتی اجرا شود.
شکل کلی استفاده از این ساختار به صورت زیر است:
switch ( نام یک متغیر یا یک عبارت ) { case مقدار ۱ : case 1 دستورات مربوط به case مقدار ۲ : case 2 دستورات مربوط به . . . . case n مقدار : case n دستورات مربوط به default : دستورات پیش فرض ساختار که در صورت عدم برقراری مقادیر تمام case های فوق ، اجرا خواهند شد }
نحوه عملکرد این ساختار به شرح زیر است:
ابتدا در پرانتز مقابل واژه کلیدی switch ، یک متغیر یا عبارت اعلام می شود . همچنین در هر دستور case ، یک مقدار مرتبط با آن متغیر نیز تعیین می شود . برنامه مقدار متغیر را ( که از قبل توسط یک تابع یا دستور مقدار دهی شده است ) را با مقدار تعیین شده برای هر case به ترتیب مقایسه کرده و در صورت برابر بودن آنها ، دستورات آن case و case های بعد از آن را اجرا می کند . در واقع دستورات تا زمان رسیدن به یک دستور break اجرا می شوند.
نکته : برای جلوگیری از اجرای case های بعدی همراه با case ای که اجرا می شود ، باید در پایان دستورات هر case از واژه کلیدی break استفاده کرد . برای دریافت توضیحات بیشتر ، به قسمت توضیح دستور break در پایین صفحه بروید.
قسمت default ، دستورات پیش فرض ساختار را تعیین می کند ، که در صورت عدم برقراری مقادیر تمام case های ساختار ، دستورات آن قسمت اجرا خواهد شد.
نکات مهم:
نوع متغیر تعیین شده در قسمت switch و مقدارهای هر یک از case ها باید با هم یکسان و از یک نوع باشند.
به تعداد مورد نیاز می توان از دستور case در ساختار switch استفاده کرد.
تعیین قسمت default در ساختار switch ، اختیاری است و می تواند تعیین نشود.
مقدار هیچ دو case متفاوتی ، نباید با هم یکسان باشد.
مثال : در مثال زیر دو کادر متن و یک دکمه فرمان قرار داده شده است . کادر متن اول یک متن یا عدد از کاربر دریافت کرده و با کلیک بر روی دکمه فرمان و فراخوانی تابع ( ) hello ، خروجی در کادر متن دوم نمایش داده می شود.
عملکرد تابع ( ) hello به شرح زیر است:
این تابع مقدار کنترل کادر متن اول یعنی txtinput ، را در متغیر matn ذخیره کرده و سپس در یک ساختار switch ،بر حسب مقادیر مختلف خروجی را در کادر متن دوم یعنی txtresult نمایش می دهد.
توجه: در اینجا به دلیل عدم استفاده از دستور break در پایان دستورات هر case با اجرای هر کدام از case های مثال ، دستورات بقیه case ها نیز اجرا می شود . بنابراین همواره خروجی ما در این حالت خروجی قسمت default است.
< input type="text" id="txtinput " / > < input type="button" name="clickme" onclick="hello( )" value="click me !" / > < input type="text" id="txtresult" / > < script type="text/javascript" > function hello( ) { var matn = txtinput.value ; switch (matn) { case "1": txtresult.value = "one" ; case "2": txtresult.value = "two"; case "3": txtresult.value = "three"; default: txtresult.value = "bigger than 3"; } } < /script >
دستور break :
همانطور که در قسمت بالا نیز اشاره شد ، چنانچه یک دستور case در ساختار switch اجرا شود ، برنامه به طور اتوماتیک دستورات تمام case های بعد از آن را نیز اجرا خواهد کرد ، مگر اینکه به یک دستور break برسد . . برای جلوگیری از این مسئله ، باید در پایان دستورات هر case از دستور break استفاده کرد.
در این حالت در صورت وارد شدن برنامه به یک دستور یک case ، فقط دستورات آن case اجرا شده و اجرای بقیه case ها متوقف می شود.
شکل کلی استفاده از دستور break به صورت زیر است:
switch ( نام یک متغیر یا یک عبارت ) { case مقدار ۱ : case 1 دستورات مربوط به break ; case مقدار ۲ : case 2 دستورات مربوط به break ; . . . . case n مقدار : case n دستورات مربوط به break ; default : دستورات پیش فرض ساختار که در صورت عدم برقراری مقادیر تمام case های فوق ، اجرا خواهند شد }
مثال: در مثال زیر ، مثال قسمت قبل را با دستور break بازنویسی کرده ایم . همانطور که در خروجی مشاهد می کنید ، در این حالت به دلیل استفاده از دستور braek در پایان هر case ، فقط دستورات آن case اجرا شده و از اجرای دستورات case های دیگر جلوگیری می شود . برای مشاهده خروجی در کادر متن txtinput متنی را وارد کرده و سپس بر روی دکمه فرمان کلیک کنید.
< input type="text" id="txtinput " / > < input type="button" name="clickme" onclick="hello( )" value="click me !" / > < input type="text" id="txtresult" / > < script type="text/javascript" > function hello( ) { var matn = txtinput.value ; switch (matn) { case "1": txtresult.value = "one" ; break ; case "2": txtresult.value = "two"; break ; case "3": txtresult.value = "three"; break ; default: txtresult.value = "bigger than 3"; } } < /script >