article

دستورات شرطی (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>
استفاده از شیوه مختصر نویسی در برنامه نویسی دلخواه است و معمولا برای نوشتن شرط های ساده از آن استفاده می کنیم.
sectionدسته بندی: آموزش مقدماتی » JavaScript
related مطالب بیشتر:
» رویداد ها (Events) در جاوا اسکریپت (JavaScript)
» کار با تاریخ و زمان در جاوا اسکریپت (JavaScript)
» توابع (Functions) در جاوا اسکریپت (JavaScript)
» عملگرها (Operators) در جاوا اسکریپت (JavaScript)
» تعریف و استفاده از متغیر (Variable) در جاوا اسکریپت (JavaScript)
commentنظرات (۲ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: بهارناز
زمان: ۰۳:۰۸:۰۲ - تاریخ: ۱۳۹۷/۰۲/۰۷
سلام. اگر از نظر اعتبار سنجی زیاد نمیشه روی جاوا اسکریپت حساب کرد. پس در کجاها ازش استفاده کنیم ؟ اعتبار سنجی اولیه یعنی چی ؟ پیشاپیش ممنونم از پاسخگوییتون
پاسخ: 
کدهای جاوا اسکریپت در مرورگر کاربران اجرا و لذا در دسترس هستند و همواره امکان تغییر آنها وجود دارد، به همین دلیل برای اعتبارسنجی نهایی و مطمئن مناسب نیستند، اما منظور از اعتبارسنجی اولیه این است که قبل از ارسال فرم به سرور پیش آگاهی به کاربران بدهیم، به طور مثال اگر کاربر یک گزینه را به اشتباه انتخاب یا ایمیل خود را با فرمت صحیح وارد نکرد در همان قسمت اطلاع رسانی صورت گیرد، این کار موجب بهبود رابط کاربری و ایجاد حس بهتر از کار با محیط برنامه می شود، در نهایت برای حفظ امنیت اعتبارسنجی نهایی در سرور و با برنامه نویسی سمت سرور که سورس ها دور از دسترس کاربران هست انجام می شود.
نویسنده: حسام
زمان: ۱۴:۴۹:۳۲ - تاریخ: ۱۳۹۸/۰۴/۱۳
سلام خسته نباشید من تابع زیر رو نوشتم اما درست کار نمیکنه خیلی سعی کردم اما درست نشد ممنون میشم راهنماییم کنید.
http://arasadr.ir/result.js
if اولش کار میکنه ولی وقتی به تکس باکس ها مقدار داده میشه مثلا 1 + 1 دیگه تغییر نمیده.
پاسخ: 
برای تست تابع به بخش کاربری صفحه و فیلدهایی که در سوال اشاره کرده اید باید دسترسی داشت، در هر صورت دو نکته در این تابع می تواند (احتمالا) علت مشکل باشد:
- مقدار متغیر i از خارج تابع و به نظر در حلقه دریافت می شود که می تواند مقادیری نامعتبر باشد!
- متد innerHTML در تابع استفاده شده که برای فیلدهای input عمل نمی کند و باید از متد value استفاده شود.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




5 × 5
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form adel
در:
سلام با تشکر از سایت خوب شما. یه سوال داشتم چگونه تمام این کدها را در جاوا اسکریپت همزمان قرار دهیم. من مثلا دستور این...
۲۱:۲۵:۴۰ ۱۳۹۸/۰۸/۲۴

form یه سوال کننده
در:
سلام. ببخشید چطور میشه ایمیل هایی رو میفرستن که ریپلای زدن رو ایمیلی که از طرف ما نبوده بیشتر تو تبلیغات دیدم امیدوارم منظورم و...
۰۳:۲۳:۰۸ ۱۳۹۸/۰۸/۲۴

form پرتو
در:
با عرض سلام و خسته نباشید امیدوارم حالتون خوب باشه من دو سه سال پیش وبلاگم رو حذف کردم ایا امکانش هست برگرده؟ ادرس...
۱۴:۵۵:۵۲ ۱۳۹۸/۰۸/۲۰

form علی
در:
سلام من نمی تونم html tag رو چطور در وبلاگم قرار بدم وبلاگم اینه
tagtak.blog.ir
۱۰:۲۳:۳۴ ۱۳۹۸/۰۸/۲۰

form حمید
در:
سلام. خسته نباشید. من میخاستم استایل فیلدهای فرمم رو تغییر بدم منتهی نمیدونم از چه کدهایی باید استفاده کنم. برای اینکه فرمی به شکل...
۱۰:۳۶:۱۹ ۱۳۹۸/۰۸/۱۹

form سمیه
در:
سلام ممنون بابت آموزش مفیدتون توی تگ ها هرچیزی که در تگ head قرار بگیره نمایش داده نمیشه، اما ممنون میشم...
۲۰:۴۹:۲۳ ۱۳۹۸/۰۸/۱۷

form استادمجازی
در:
سلام. از ادمین عزیز و همگی دعوت می کنم آموزش های خوبتون را بصورت آموزش ویدیویی یا صوتی و... در سایت ostadmajazi.com استادمجازی ...
۲۲:۱۲:۲۳ ۱۳۹۸/۰۸/۱۳

form mohamad
در:
سلام و خسته نباشید ، توی فرمی که ساختم چند تا drop down دارم که میخوام با php براشون شرط بذارم به طوری...
۱۳:۵۱:۳۴ ۱۳۹۸/۰۸/۱۰

form رضا
در:
خسته نباشید این جلسه آخر html بود؟؟؟؟
۰۱:۱۵:۰۷ ۱۳۹۸/۰۸/۱۰

form امیرمحمد
در:
سلام و خسته نباشید استاد بنده میخوام بین دو کد زیر که مشخص کردم رو به دست بیارم
// ---------------------set سلام...
۱۹:۳۰:۵۳ ۱۳۹۸/۰۸/۰۸

form حجت
در:
خیلی ممنونم از لطف شما. اوکی شد.
۱۰:۲۸:۳۵ ۱۳۹۸/۰۸/۰۶

form میلاد
در:
آشنایی نسبی با css, php و ajax دارم و نمیخام از library های موجود در نت استفاده کنم. خواستم با همین متد که انصافا روان...
۲۳:۲۲:۵۵ ۱۳۹۸/۰۸/۰۵

form عرفان
در:
با سلام. مدتی بود که بدلایل مشکلات زیاد نتونستم به وبلاگم رسیدگی کنم ولی وقتی برگشتم میبینم که هزاران بازدید داشتم و همشونم به زبان...
۲۲:۴۹:۴۴ ۱۳۹۸/۰۸/۰۵

form raha
در:
سلام وقتتون بخیر ببخشید علامت @ در کل به چه معناست ممنون میشم پاسخ دهید
۲۰:۱۲:۵۹ ۱۳۹۸/۰۸/۰۵

form میلاد
در:
باسلام تشکر از مطالب روان و پرکاربردتان. در خصوص آموزش مذکور، نحوه و ترفند نمایش محور عمودی در سمت چپ نمودار (مشابه...
۰۲:۳۸:۴۰ ۱۳۹۸/۰۸/۰۵