نحوه ی به کارگیری از دستور سوئیچ در زبان جاوا اسکریپت

نحوه ی به کارگیری از دستور سوئیچ در زبان جاوا اسکریپت


طرز کار دستور یا بهتر بگوییم استیتمنت switch (سوییچ) بدین شکل است که برای شرایط مختلف، دارای انتخاب های مختلف است و زمانی که یک اکسپرشن را به آن ارجاع می دهیم، مقدار آن را محاسبه می کند و سپس با توجه به شرط هایی که در اختیار دارد، یکی را بر می گزیند که با مقدار اکسپرشن مورد نظر همخوانی داشته باشد و سپس کد درون آن شرط را اجرا می کند. به هر کدام از شرط هایی که درون سوییچ قرار دارند، یک case (کیس یا مورد) گفته می شود. اگر بخواهیم یک مثال خودمانی بزنیم، می توان این گونه گفت که:

“اگر قرار است که 6 نفر مهمان برایمان بیاید، سه پیتزای بزرگ سفارش بده. در صورتی که 12 نفر مهمان داشتیم، شش پیتزای بزرگ سفارش بده. اگر بیش از 12 نفر مهمان داشتیم، خانه را ترک کن!”

در صورتی که بخواهیم کدی برای سناریویی فوق بنویسیم، به ۳ case مختلف نیاز خواهیم داشت که بسته به تعداد میهمانان، کیس مناسب اجرا خواهد شد. سینتکس کلی استیتمنت سوییچ به شکل زیر است:

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

نکته
یکی از Best Practiceها در کدنویسی یا بهتر بگوییم «شیوه های حرفه یی کدنویسی» این است که در دستور سوییچ حتما کیس default را قرار دهیم تا در صورتی که اکسپرشن ورودی با هیچ کدام از کیس ها همخوانی نداشت، کیس default اجرا گردد. قرار دادن کیس دیفالت دلخواه است اما همواره توصیه می شود که آن را به عنوان آخرین کیس در نظر بگیریم.

اما در اینجا باید به استیتمنت های break توجه ویژه یی داشته باشیم. break دقیقاً پس از هر کیس آورده می شود و وظیفه اش آن است که دستور توقف و خروج از سوییچ را صادر کند. اگر این break را بلافاصله پس از هر case نگذاریم، دستور سوییچ تمامی کدهایی که در بخش ها و کیس های بعدی وجود دارند را نیز اجرا خواهد کرد، حتی اگر شرط آن ها با اکسپرشن بالا همخوانی نداشته باشد.

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

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

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

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

در این جا، یک متغیر به نام language وجود دارد که قرار است به عنوان اکسپرشن ورودی در switch استفاده شود. مقدار اولیه ی این متغیر، استرینگ “Spanish” است. حال دستور switch را نوشته و مقداری که قرار است مورد بررسی قرار بگیرد را در داخل پرانتزهای جلوی آن می نویسیم. در اینجا می خواهیم مقدار متغیر language را برای هر کدام از کیس های درون switch بررسی کنیم.

در داخل براکت های switch، هر تعداد case که نیاز داریم را می نویسیم. ” ” های جلوی هر کیس، به نوعی مانند دروازه ی ورود به آن کیس عمل می کنند. برای نمونه، اولین کیس در مثال بالا می گوید که اگر اکسپرشن ورودی سوییچ دارای مقداری برابر با “English” بود، پس شما می توانید وارد کیس شده و کدهای درون آن را اجرا کنید، در غیر این صورت، باید آن را نادیده بگیرید.

حال از آنجایی که مقدار language برابر با “Spanish” است، پس کیس اول نادیده گرفته می شود و جاوا اسکریپت به سراغ کیس دوم می رود. از آنجایی که شرط ورود به کیس دوم دقیقاً برابر با مقدار متغیر language است، پس کدهای درون این کیس اجرا شده و عبارت “!Hola” به کاربر نمایش داده می شود. پس از آن، جاوا اسکریپت با دستور break مواجه می شود، از همین روی، از بررسی سایر کیس ها خودداری می کند و کاملاً از دستور سوییچ نیز خارج می شود چرا که break به نوعی مانند «سوت پایان مسابقه» می ماند و جاوا اسکریپت بخش مربوط به آن را تکمیل شده تلقی می کند.

در نمونه ی بالا، اگر کاربر زبانی را انتخاب کند که ما از قبل در کیس های switch پیش بینی نکرده باشیم (مثلاً زبان Persian)، جاوا اسکریپت با بررسی تمامی کیس ها از بالا به پایین، متوجه می شود که این شرط در سوییچ وجود ندارد و به همین دلیل به سراغ بخش default می رود و کدهای آن را اجرا می کند و عبارت “!Sorry, I don’t speak Persian” را نمایش می دهد. پس از آن نیز برنامه کاملاً از سوییچ خارج می شود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *