یکشنبه ۰۳ مرداد ۱۴۰۰

Sunday, July 25, 2021 GMT +4:30

» دستورات شرطی (Conditional Statements) در جاوا اسکریپت (JavaScript)

javascript-conditional-statements

در علم کامپیوتر و دنیای برنامه نویسی دستورات شرطی (Conditional Statements) عباراتی آشنا هستند که تقریبا در هر زبانی با آنها سر و کار خواهیم داشت، دستورات شرطی به بیان ساده برای تعیین مسیر اجرا و پردازش کدها در دو راهی های برنامه ها استفاده می شوند که منظور از دو راهی true یا false بودن رابطه است، به فرض در محاوره می گوییم اگر X بزرگتر از Y باشد (نتیجه مقایسه true باشد) پلن A اعمال می شود در غیر این صورت (نتیجه مقایسه false باشد) پلن B اعمال خواهد شد و در واقع با بررسی هر مقایسه عملیات در نظر گرفته شده برای آن را لغو یا اجرا می کنیم، در دنیای برنامه نویسی نیز دستورات شرطی به این منظور تعریف شده اند تا بتوانیم عبارات "اگر"، "در غیر این صورت" و "در غیر این صورت اگر" را به زبان کدها ترجمه کنیم، پیش از این گفتیم که شیوه نگارش (Syntax) زبان های برنامه نویسی چیزی نیست جزء روشی که بتوانیم ایده های ذهنی خود را به کمک آنها به دستورات قابل فهم برای ماشین و مفسر آن زبان تبدیل کنیم و دستورات شرطی یکی از ابزارها و قابلیت هایی است که ما را در این راه یاری می دهند.

دستورات شرطی (Conditional Statements) در جاوا اسکریپت (JavaScript)


همان طور که در آموزش های قبل گفتیم عملگرهای محاسبه، مقایسه و استدلال منطقی در جاوا اسکریپت بدون وجود دستورات شرطی عملا کاربردی ندارند و در کنار این دستورات است که فرآیند مقایسه کامل می شود، دستورات شرطی شامل سه عبارت if (اگر)، else (در غیر این صورت) و else if (درغیر این صورت اگر) است، برای درک این دستورات به همان مثال آموزش قبل و محاسبه امتیازات مشتریان فروشگاه آنلاین رجوع می کنیم، فرض کنیم می خواهیم مقایسه کنیم که امتیاز کاربر از 12 کوچکتر باشد، در این صورت به زبان ساده خواهیم نوشت "(اگر امتیاز کاربر کمتر از 12 بود) {این فرآیند را انجام می دهیم}" که نمونه کد آن به شکل زیر خواهد بود.
if(point < 12){
}
اگر نتیجه این رابطه صحیح (true) باشد محتوای داخل {} اجرا خواهد شد (این محتوا با توجه به هدف و نیاز ما از برنامه نویسی مشخص می شود)، حال فرض کنیم نتیجه این رابطه نادرست (false) باشد یعنی امتیاز کاربر بیشتر از 12 یا مساوی با آن است، در این حالت دو راه برای توسعه کد وجود دارد، استفاده از else (در غیر این صورت) یا else if (درغیر این صورت اگر)، اگر از else استفاده کنیم نقطه پایانی مقایسه را تعیین کرده ایم و دیگر نمی توانیم آن را توسعه دهیم "(اگر امتیاز کاربر کمتر از 12 بود) {این فرآیند را انجام می دهیم} (در غیر این صورت) {این فرآیند را انجام می دهیم و تمام}".
if(point < 12){
} else{
}
اما else if مشابه if عمل می کند و می توانیم به هر تعداد مورد نیاز مقایسه را توسعه دهیم "(اگر امتیاز کاربر کمتر از 12 بود) {این فرآیند را انجام می دهیم} (در غیر این صورت اگر امتیاز کاربر کمتر از 14 بود) {این فرآیند را انجام می دهیم} (در غیر این صورت اگر امتیاز کاربر بیشتر از 16 بود) {این فرآیند را انجام می دهیم} (در غیر این صورت) {این فرآیند را انجام می دهیم و تمام}".
if(point < 12){
} else if(point < 14){
} else if(point > 16){
} else{
}
تحلیل نمونه کد بالا بسیار ساده است، در شرط if اول بررسی می کنیم اگر مقدار متغیر point کوچکتر از 12 باشد قسمت داخل {} آن اجرا و فرآیند مقایسه به پایان می رسد، اما اگر اینگونه نبود و به فرض point برابر 13 باشد else if اول اجرا و اگر point برابر 17 باشد قاعدتا else if دوم اجرا خواهد شد، بر همین اساس اگر point برابر 15 باشد قسمت else پایانی اجرا می شود چون هیچ کدام از مقایسه های قبلی true نیستند و else پایانی به عنوان حالت پیش فرض اجرا می شود، در نمونه کد زیر از شرط if و else جهت مقایسه امتیاز کاربر فرضی استفاده کرده ایم که با اجرای کدها و تغییر مقدار متغیر point شیوه مقایسه، منطق و شرط در جاوا اسکریپت به خوبی قابل درک خواهد بود.
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | مقایسه با دستورات شرطی if و else در جاوا اسکریپت</title>
<!-- Webgoo.ir -->
<style>
.rtl {
    direction: rtl;
}
</style>
</head>
<body>
<div class="rtl">
<noscript>جاوا اسکریپت در مرورگر شما پشتیبانی نمی شود یا غیرفعال است!</noscript>
<script>
var point = 10;
var num = 12;

if(point < num){
    document.write('امتیاز کاربر کمتر از ' + num + ' است!');
} else{
    document.write('امتیاز کاربر بیشتر از ' + num + ' یا مساوی با ' + num + ' است!');
}
</script>
<hr>
<script>
var point = 20;
var num = 18;

if(point < num){
    document.write('امتیاز کاربر کمتر از ' + num + ' است!');
} else{
    document.write('امتیاز کاربر بیشتر از ' + num + ' یا مساوی با ' + num + ' است!');
}
</script>
<hr>
<script>
var point = 15;
var num = 15;

if(point < num){
    document.write('امتیاز کاربر کمتر از ' + num + ' است!');
} else{
    document.write('امتیاز کاربر بیشتر از ' + num + ' یا مساوی با ' + num + ' است!');
}
</script>
<hr>
علامت + در جاوا اسکریپت هم مقدار عددی (Int) و هم مقدار رشته ای (String) را جمع می کند! اگر دو طرف رابطه هر دو عدد باشند حاصل یک عدد خواهد بود، اما اگر یکی از طرفین یا هر دو طرف به صورت رشته باشند، حاصل یک مقدار رشته ای خواهد بود.
</div>
</body>
</html>
پیش نمایش
برای درک بهتر نحوه عملکرد دستورات شرطی در جاوا اسکریپت، می توانیم کد بالا را در سیستم خود در یک فایل با فرمت html ذخیره، مقادیر متغیرها را به نحو دلخواه تغییر و نتیجه هر تغییر را در مرورگر ببینیم.
در نمونه کد بالا صرفا از دستور شرطی if و else استفاده شده است، در برنامه نویسی معمولا فرآیندها پیچیده تر از این هستند و ناگزیر باید از eles if نیز استفاده کنیم، مثال زیر شکل توسعه یافته نمونه کد بالا است که در صورت تسلط بر دستور if و else می توانیم این کد را نیز جهت درک بهتر بررسی و موشکافی کنیم.
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | مقایسه با دستورات شرطی if، else و else if در جاوا اسکریپت</title>
<!-- Webgoo.ir -->
<style>
.rtl {
    direction: rtl;
}
</style>
</head>
<body>
<div class="rtl">
<noscript>جاوا اسکریپت در مرورگر شما پشتیبانی نمی شود یا غیرفعال است!</noscript>
<script>
var point = 14;
var num = 12;

if(point < num){
    document.write('امتیاز کاربر کمتر از ' + num + ' است!');
} else if(point == 12){
    document.write('امتیاز کاربر 12 است!');
} else if(point > 12 && point < 15){
    document.write('امتیاز کاربر بین 12 تا 15  است!');
} else if(point == 15 || point == 16){
    document.write('امتیاز کاربر 15 یا 16  است!');
} else{
    document.write('امتیاز کاربر بیشتر از 16  است!');
}
</script>
<hr>
به یاد داشته باشیم جاوا اسکریپت در مرورگر کاربران اجرا می شود و سورس کدها در دسترس هستند، لذا سهوا یا عمدا همواره امکان تغییر نحوه عملکرد آنها وجود دارد، به همین دلیل نمی توانیم به عنوان یک روش مطمئن برای اعتبارسنجی روی آن حساب کنیم، برای اینگونه موارد باید از زبان های سمت سرور مانند PHP استفاده کنیم، در عمل معمولا اعتبارسنجی های اولیه توسط جاوا اسکریپت انجام شده و در نهایت پس از ارسال اطلاعات به سرور این PHP است که اعتبارسنجی اصلی و نهایی را انجام می دهد، به این صورت هم رابط کاربری بهینه و هم کدهای مطمئن با عملکرد حساب شده خواهیم داشت.
</div>
</body>
</html>
پیش نمایش
نکته: دقت کنیم شیوه نگارش (Syntax) هر زبانی مخصوص به خودش است و اگر این اصول را رعایت نکنیم در اجرای کدها با خطا مواجه خواهیم شد، به طور مثال دستور else if در جاوا اسکریپت با یک فاصله به کار می رود اما در PHP به صورت elseif نگارش می شود.

مختصرنویسی با عملگرهای سه گانه (Ternary Operators) در جاوا اسکریپت


در برنامه نویسی پروژه های کاربردی به دلایل مختلف ممکن است نیاز به مختصرنویسی دستورات شرطی else if ،if و else باشد که در پاسخ به این نیاز در اغلب زبان ها این هدف با عملگرهای سه گانه یا Ternary Operators تحقق می یابد، منظور از عملگرهای سه گانه ترکیب مقایسه با کاراکترهای ? و : است، در شیوه مختصرنویسی علامت ? جایگزین if و علامت : جایگزین else می شود، به طور مثال اگر دستور شرطی در حالت عادی به شکل زیر باشد:
<script>
var point = 14;
var num = 12;
if(point < num) {
    alert('if');
} else{
    alert('else');
}
</script>
شیوه مختصرنویسی آن به صورت زیر خواهد بود:
<script>
var point = 14;
var num = 12;
(point < num) ? alert('if') : alert('else');
</script>
با ترکیب و توسعه این روش حتی می توانیم دستور شرطی else if را نیز به صورت مختصرنویسی بنویسیم، به طور مثال:
<script>
var point = 14;
var num = 14;
(point < num) ? alert('if') : (point <= num) ? alert('else if') : alert('else');
</script>
استفاده از شیوه مختصر نویسی در برنامه نویسی دلخواه است و معمولا برای نوشتن شرط های ساده از آن استفاده می کنیم.
دسته بندی: آموزش مقدماتی » JavaScript
related مطالب بیشتر:
» آرایه (Array) در جاوا اسکریپت (JavaScript)
» کار با پنجره Pop-up در جاوا اسکریپت (JavaScript)
» عملگرها (Operators) در جاوا اسکریپت (JavaScript)
» توابع (Functions) در جاوا اسکریپت (JavaScript)
» دستور switch و case در جاوا اسکریپت (JavaScript)
commentنظرات (۲ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: بهارناز
۰۳:۰۸ ۱۳۹۷/۰۲/۰۷
سلام. اگر از نظر اعتبار سنجی زیاد نمیشه روی جاوا اسکریپت حساب کرد. پس در کجاها ازش استفاده کنیم ؟ اعتبار سنجی اولیه یعنی چی ؟ پیشاپیش ممنونم از پاسخگوییتون
پاسخ: 
کدهای جاوا اسکریپت در مرورگر کاربران اجرا و لذا در دسترس هستند و همواره امکان تغییر آنها وجود دارد، به همین دلیل برای اعتبارسنجی نهایی و مطمئن مناسب نیستند، اما منظور از اعتبارسنجی اولیه این است که قبل از ارسال فرم به سرور پیش آگاهی به کاربران بدهیم، به طور مثال اگر کاربر یک گزینه را به اشتباه انتخاب یا ایمیل خود را با فرمت صحیح وارد نکرد در همان قسمت اطلاع رسانی صورت گیرد، این کار موجب بهبود رابط کاربری و ایجاد حس بهتر از کار با محیط برنامه می شود، در نهایت برای حفظ امنیت اعتبارسنجی نهایی در سرور و با برنامه نویسی سمت سرور که سورس ها دور از دسترس کاربران هست انجام می شود.
نویسنده: حسام
۱۴:۴۹ ۱۳۹۸/۰۴/۱۳
سلام خسته نباشید من تابع زیر رو نوشتم اما درست کار نمیکنه خیلی سعی کردم اما درست نشد ممنون میشم راهنماییم کنید.
http://arasadr.ir/result.js
if اولش کار میکنه ولی وقتی به تکس باکس ها مقدار داده میشه مثلا 1 + 1 دیگه تغییر نمیده.
پاسخ: 
برای تست تابع به بخش کاربری صفحه و فیلدهایی که در سوال اشاره کرده اید باید دسترسی داشت، در هر صورت دو نکته در این تابع می تواند (احتمالا) علت مشکل باشد:
- مقدار متغیر i از خارج تابع و به نظر در حلقه دریافت می شود که می تواند مقادیری نامعتبر باشد!
- متد innerHTML در تابع استفاده شده که برای فیلدهای input عمل نمی کند و باید از متد value استفاده شود.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





2 × 3
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form آی تی
در:
ممنون آینده کاری پی اچ پی خوبه یا جاواسکریپت؟
۱۴۰۰/۰۴/۳۰

form رضا
در:
با عرض سلام و خسته نباشید ایا امکان این قضیه در outlook وجود دارد که ما ادرس فرستنده را از طریق آن بتوانیم پیدا...
۱۴۰۰/۰۴/۳۰

form محمود
در:
سلام مهندس چگونه می شود میزان حرکت اسکرول را تعیین کرد. یعنی با یه حرکت غلطک موس صفحه بعدی در کادر قرار بگیرد....
۱۴۰۰/۰۴/۳۰

form محمد
در:
سلام خیلی خیلی ممنون تشکر
۱۴۰۰/۰۴/۲۷

form محمود
در:
سلام چگونه حاشیه های ناتمام ایجاد کنیم. یعنی تمام دور کادر کامل نباشد و بردر دور کادر ناقص باشد. مثلن بردر سمت راست تا...
۱۴۰۰/۰۴/۲۷

form محمد
در:
سلام ببخشید من با curl میخواستم فایلی رو با api بفرستم ولی جواب نداد اگر امکانش هست تصحیحش کنید:
۱۴۰۰/۰۴/۲۷

form برنامه نویس
در:
سلام و عرض ادب خدمت استاد. یه سوال خدمت شما داشتم. چطور می تونیم از ادیتور مثل ckeditor یا tinymsc به جای textarea...
۱۴۰۰/۰۴/۲۷

form جواد
در:
با سلام من دانشی از برنامه نویسی ندارم ، میشه برنامه ای نوشت که آدرس یک صفحه بعد از لاگین شدن بهش داد و هر...
۱۴۰۰/۰۴/۲۱

form علی
در:
سلام خوبین؟ من میخوام برای وبلاگم سبد خرید بزنم ولی php و ........ بلد نیستم اگه برام درست کنین ممنونتون میشم
۱۴۰۰/۰۴/۱۹

form سینا الف
در:
باسلام! من از این آموزش‌ سایت‌تون هم خیلی استفاده کردم. ضمن تشکر صمیمانه از مدیریت وبگو بابت مطالب مفید و کاربری اش، سوالی درباره...
۱۴۰۰/۰۴/۱۸

form محمود
در:
سلام و تشکر از کمک های قبلی تان. در بخش بالا قسمت «تغییر رنگ پس زمینه با کلیک کاربرم» را خوندم . ولی کد...
۱۴۰۰/۰۴/۱۸

form محمود
در:
با سلام دوباره نمونه کدی که برای افکت پس زمینه چراغ پلیس و صدا قرار دادین خیلی خوب کار میکند و بسیار سپاس ....
۱۴۰۰/۰۴/۱۴

form احمد
در:
سلام خسته نباشید من یه کد نوشتم که قیمت کالا ها و نام کالا ها رو از یه صفحه برام استخراج کنه و بصورت جدول...
۱۴۰۰/۰۴/۱۴

form محمود
در:
سلام و عرض ادب چگونه می شود با کلیک روی یک متن ، کل پس زمینه در یک آن چشمک بزند یعنی رنگ...
۱۴۰۰/۰۴/۱۱

form مجید
در:
سلام. من برنامه ای دارم که بر اساس php و mysql کار میکنه. بهش 100 جمله میدم و جملات رو تصادفی نمایش میده. حالا میخام...
۱۴۰۰/۰۴/۱۰

form Amir
در:
خیلی عالی بود
۱۴۰۰/۰۴/۱۰

form Amir
در:
سلام ببخشید یک کانال تلگرامی است که سیگنال میده و شرطی اینکه در آلپاری و لایت فارسی حساب داشته باشی و تحت ای پی آنها...
۱۴۰۰/۰۴/۱۰

form مجید
در:
خیر ببینی جوون - این اسکرول افقی کلی اعصاب رو بهم ریخته بود .
۱۴۰۰/۰۴/۰۷

form جین مین
در:
با سلام و وقت بخیر من تمام مراحل رو به نظر خودم درست انجام دادم و فایل هم دانلود میشه اما مشکل اصلی اونجاست...
۱۴۰۰/۰۴/۰۶
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.