امروز پنجشنبه ۱۴۰۰/۰۱/۲۶

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





6 × 1
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form شریفی
در:
سلام مجدد. من یه سوال خیلی تخصصی دارم. ممنون میشم پاسخ بدین. برای پروژه پایان نامه. دارم روی موتورهای جستجوگر تحقیق میکنم. فرض...
۱۴۰۰/۰۱/۲۵

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

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

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

form mahdi
در:
سلام استاد عزیز ، بازم معذرت میخوام سوالام زیاد شد ولی همشون در یک موضوع هستن ، تونستم که با این روش برای هر اسلایدر...
۱۴۰۰/۰۱/۱۸

form mahdi
در:
سلام استاد عزیز عذر میخوام بار سومه پیام میزارم ، مشکلش از ست اینترول بود که قطع نمیشد و با هم تداخل داشتند ولی بدون...
۱۴۰۰/۰۱/۱۸

form mahdi
در:
سلام وقت بخیر استاد عزیز ، یک تابع رو چطور میشه در جاوا اسکریپت اورراید کرد؟ که مثلا با هر فراخوانی مجدد ، قبلی ها...
۱۴۰۰/۰۱/۱۸

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

form امیرحسین برزویی
در:
من یک وبلاگ دارم و 9 سالمه من در وبلاگم مداحی می گذارم ولی وقتی قاب گذاشتم از این سایت من دیگه فیلم...
۱۴۰۰/۰۱/۱۶

form بنده خدا
در:
سلام خسته نباشین، خدا قوت. یه سوال دارم. چرا در بخش نظردهی وبلاگ به جای عنوان پست می نویسه مطلب مورد نظر یافت نشد؟!...
۱۴۰۰/۰۱/۱۵

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

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

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

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

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

form محسن
در:
سلام ، سوال من مربوط به پنل کارگزاری هاست ، وقتی اسم یک سهم (نماد) را در قسمت جست و جو سرچ میکنم...
۱۴۰۰/۰۱/۰۸

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

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

form Rabbiten
در:
سلام. من چند ماه است که دنبال کد استایل تصویر مثل تبلیغات بالای سایت شما هستم. اما هیچ جا پیدایش نمی کنم. لطف می...
۱۴۰۰/۰۱/۰۱

form mahdi
در:
سلام استاد عزیز سال نو رو تبریک میگم بهتون ، امیدوارم که خودتون و خانوادتون همیشه سالم و سلامت باشید و امسال پر از...
۱۳۹۹/۱۲/۳۰

form korosh abbasy
در:
سلام وقت بخیر ببخشید در مورد این مطلب سوالی پرسیدم شما در مورد output buffering توضیح دادید کد کار نمیکنه میخواستم ببینم نیازی هست من...
۱۳۹۹/۱۲/۲۹

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

form احمد
در:
با سلام خسته نباشید ببخشید قبلا یه سری دستورات جی کوری رو از خودتون گرفتم وقتی فیلدهای فرمم تکمیل شده است توسط هدر بره به...
۱۳۹۹/۱۲/۲۸

form korosh abbasy
در:
سلام دم شما گرم این دستور برای خوندن فایل هم استفاده میشه؟ من میخوام دسترسی تعیین کنم که اگر یک متغییر true...
۱۳۹۹/۱۲/۲۷
  در انتظار بررسی: ۱
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.