عملگر در جاوا اسکریپت

سلام! به آموزش این جلسه خوش اومدید. در این جلسه با هم میخواهیم عملگرها در جاوا اسکریپت رو یاد بگیریم.
در جاوا اسکریپت عملگرهای مختلفی داریم که بسیار کاربردی هستند و تا الان هم از بعضی از این عملگرها استفاده کردیم. به طور کلی میشه عملگرهای جاوا اسکریپت رو به این چند دسته ای که در ادامه میگم دسته بندی کرد.

1- عملگرهای حسابی که همونجور که از اسمش مشخصه با اون قراره محاسبات انجام بدیم، مثل جمع ، منها ضرب تقسیم…
2- عملگرهای انتساب که در جلسه قبل (شرط در جاوا اسکریپت) بهش اشاره کردم. وقتی 5 رو در متغیر x ذخیره میکنیم در واقع داریم 5  رو به اون متغیر نسبت میدیم.
3- عملگرهای مقایسه که باز هم در جلسه قبل بهش اشاره کردیم و گفتیم ما در شرطهامون از عملگرهای مقایسه مثل کوچکتر بزرگتر استفاده میکنیم
4- و عملگرهای منطقی که میتونن باعث ترکیب شرطها بشن.

در ادامه این آموزش قراره در مورد این عملگرها کامل صحبت کنم، پس با من تا انتهای این مطلب همراه باشید

1- عملگرهای حسابی

در آموزشهای قبلی با عملگرهای حسابی تا حدودی آشنا شدید. +، – ، * و / که نیاز به توضیح اضافه ندارن! در جاوا اسکریپت توان رو با ** نشون میدن و باقیمانده هم با درصد. میتونید دستورات زیر رو در vscode امتحان کنید که مطمئن شید همه چی اوکیه:

فقط یه نکته اضافه کنم:
دوستانی که دوره الگوریتم و فلوچارت سایت رو تهیه کردن، و یا قبلا با زبانهایی مثل سی، سی پلاس پلاس، جاوا و سی شارپ کار کردن با مفهوم تقسیم صحیح آشنا هستند. باید اینجا این نکته رو بگم که در جاوا اسکریپت تقسیم به صورت اعشاری انجام میشهو یعنی 10 تقسیم بر 3 میشه 3.33. (اگر نمیدونید تقسیم صحیح یا اعشاری چیه نگران نباشید. تو جاوا اسکریپت همچین مفهومی نداریم)

عملگر increment (++)

در جاوا اسکریپت (مثل خیلی از زبانهای دیگه) میتونید با عملگر ++ به مقدار متغیرتون یه واحد اضافه کنید. این عملگر به دو صورت میشه در کنار متغیر استفاده کنیم: x++ یا ++x
مثلا در کد زیر در خط 2 یه واحد داره به x اضافه میشه و در خروجی چاپ میشه. پس مقدار خروجی میشه 11.

اما کد زیر رو اگر در vscode اجرا کنید مقدار 10 چاپ میشه:

چرا؟ در کد اولی (اونجایی x++ رو چاپ کردیم) اول به x اضافه میشه بعد x رو در خروجی چاپ میکنه. اما در کد دومی اول x رو چاپ میکنه و بعد به x اضافه میکنه. بنابراین در کد دومی مقدار 10 چاپ میشه اما بعد از پایان دستور کنسول مقدار x یازده میشه. پس انتظار دارم بگید که خروجی کد زیر رو بتونید بگید:

عملگر decrement (--)

اگه عملگر increment رو یاد گرفته باشید decrement هم همینه، با این تفاوت که میاد مقدار کم میکنه. بررسی کنید که کدهای زیر چه کاری انجام میدن. با دقت بررسی کنید

در کد زیر تو خروجی 10 و 8 چاپ میشه. 

2- عملگرهای انتساب

وقتی مینویسیم x = 1 در واقع داریم عملگر مساوی ، عملگر انتسابه. یعنی داریم 1 رو به x نسبت میدیم. در کنار عملگر چند تا عملگر انتساب دیگه هم داریم. کد زیر رو ببینید:

معادل خط دوم رو در خط سوم میبینید. یعنی عملگر =+ به این معنیه : مقدار سمت راست (عدد 5) رو به متغیر x اضافه کن. به همین صورت میشه =- ، =* ، …  رو هم استفاده کنیم. میتونید کد زیر رو در vscode تست کنید و مقادیر رو جدا جدا لاگ بگیرید:

3- عملگرهای مقایسه ای

عملگرهای مقایسه ای رو اینجا لیست کردم:

< , <= , > , >=

== , != , ===, !== 

قبل از اینکه کد پایین رو ببینید این نکته رو بگم که عملگرهای مقایسه ای اینجوری تعبیر میشن: قراره دو تا مقدار رو با یکی از این عملگرها مقایسه کنیم. نتیجه این مقایسه یا درسته یا غلط. یا true است یا false. 
حالا بریم کدهای زیر رو ببینیم:

با توضیحاتی که دادم انتظار دارم بتونید تشخیص بدید که دستور اولی، دومی و چهارمی True رو در خروجی چاپ میکنند و دستور سومی false. و میشه این مقایسه ها رو در متغیر هم ذخیره کنیم: 

4 تا عملگر اولی رو یاد گرفتیم بریم سراغ 4 تای بعدی

عملگر Equality (==)

با این عملگر میتونیم دو تا مقدار رو با هم چک کنیم ببینیم آیا مساوی ان یا نه. عملگر =! هم به معنی مخالف بودنه. مثلا کدهای زیر رو در نظر بگیرید:

همه دستورات بالا در خروجی true رو چاپ میکنند.

عملگر Strict Equality (===)

به این عملگر که اکیدا مساوی هم میگن. اما فرقش با قبلیه چیه؟ عملگر == فقط مقادیر رو با هم چک میکنن ولی عملگر === مقادیر و نوع داده ای رو با هم چک میکنند. به همین خاطره که دستور آخر کد زیر خروجیش میشه False. چرا؟ مقادیر 1  و  ‘1’ با هم برابره ولی نوع داده ایشون با هم متفاوته یکیشون number و یکی دیگه string.

ternary operator

یکی از عملگرهای قشنگ جاوا اسکریپت ternary است! من به شخصه از این عملگر زیاد استفاده میکنم و در واقع این عملگر هم در دسته عملگرهای مقایسه ای قرار میگیره. اما این عملگر چه جوری کار میکنه؟ 

بذارید با یه مثال ادامه بدیم. فرض کنید که میخواهید یک سرویس طراحی کنید که هزینه پست محصولاتی که کاربر از سایتتون میخره رو محاسه کنید و هزینه رو میخواهید به این صورت محاسبه کنید که اگه کاربر خرید بیشتر از 200 هزار تومان داشته هزینه پست رایگان باشه و اگه زیر 200 هزارتومان بود هزینه 15 هزار تومان محاسبه بشه. اگه بخواهیم اینو با ternary بنویسیم این شکلی میشه: (برای راحتی کار سه تا صفر رو حذف کردم)

اگر دقیق بخوام این عملگر چیکار میکنه باید بگم که در خط 2 دو تا عملگر ؟ و : میبینید. درسته؟ با این دو عملگر یه جوارایی میشه گفت 3 تا مکان درست شده:

مقدار 2 : مقدار 1 ؟ (شرط)

اگر شرط درسته باشه مقدار 1 و اگر غلط باشه مقدار 2 برگشت داده میشه. یعنی روی کد خودمون بخوام بگم اینجوری میشه گفت که اگه price بزرگتر از 200 باشه صفر رو تو post ذخیره میکنه و اگه نباشه 15 ذخیره میشه. در واقع همون مفهوم if و else است که در آموزش شرط بهتون گفتم با این تفاوت که خلاصه تر و کوتاهتره. 

4- عملگر منطقی (&& , || , ! )

عملگر && (بخونید and)

آخرین دسته عملگرهای جاوا اسکریپت که میخوام در موردش صحبت کنم عملگرهای منطقی است. با استفاده از عملگرهای منطقی شما میتونید چند تا شرط رو با هم ترکیب کنید. مثلا فرض کنید در مثال قبلی (محاسبه هزینه پست خرید کاربر) بخواهید اینجوری به مساله نگاه کنید: 
اگر کاربر خرید بالای 200 هزارتومن داشت و فاصله کاربر از انبار فروشگاه کمتر 100 کیلومتر بود هزینه پست رایگان باشه وگرنه هزینه پست رو 5 صدم خریدش در نظر بگیره.
برای این سوال نیاز داریم دو تا شرط رو با هم ترکیب کنیم و بگیم اگر هر دو تا شرط درست بود  هزینه ارسال پست رو رایگان در نظر بگیر. برای همچین ترکیبی به عملگر && نیاز داریم. قبل اینکه کد این مساله رو پیاده کنیم این کد رو ببینید:

خروجی کد بالا چیه؟
وقتی ما دو تا شرط رو با استفاده از عملگر && با هم ترکیب میکنیم اینجوری تعبیر میشه که اگه دو تا شرط با هم true باشه ترکیب این دو تا شرط هم true میشه اما اگه حداقل یکیش  false باشه ترکیب دو تا شرط false میشه. با این توضیحات این 4 خط رو هم ببینید:

و دیگه فکر میکنم الان میتونید مساله ای که مطرح کردم رو کد نویسی کنید:

عملگر || (بخونید or)

عملگر or ترکیب دو تا شرط رو میسازه و میگه اگر یکی از شرطها true باشه حاصل ترکیب true میشه. یعنی اینجوری:

پس اگه سوال اینجوری باشه:
هزینه پست کاربر رو صفر در نظر بگیر اگر خرید کاربر بیشتر از 200 هزار تومان باشه و یا فاصله کاربر از انبار کمتر از 10 کیلومتر باشه.
کدش رو هم اینجوری مینویسیم:

عملگر ! (بخونید not)

دو تا عملگر قبلیمون عملگر دوگانی بودن، یعنی نیاز به دو تا شرط داشتیم که اون عملگرها روشون اجرا میشه، اما عملگر not عملگر یگانیه. یعنی روی یه شرط اعمال میشه و شرط هر چی باشه برعکسش میکنه.

اولویت عملگرهای منطقی

به نظرتون خروجی کد زیر چیه؟ با دقت دنبال کنید و جواب بدید.

اگر به false رسیدید احتمالا به این خاطره که به ترتیب اومدید شرطها رو با هم ترکیب کردید، که کار اشتباهیه. چرا؟ چون اولویت عملگرها رو رعایت نکردید. همونجور که تو عملگرهای حسابی اولویت ضرب و تقسیم از جمع و منها بیشتره در عملگرهای منطقی هم اولویت && از اولویت || ّبیشتره و اولویت ! از هردو تا عملگر && و || بیشتره. به همین راحتی!

شما دهمین جلسه از آموزشهای رایگان جاواسکریپت من رو به پایان رسوندید. اگر دوست دارید میتونید همه آموزشهای رایگان من رو در سایت و یا یوتیوب از اینجا دنبال کنید:
دوره جامع جاوا اسکریپت

این مطلب برات مفید بود؟

من یک دوره آموزشی جامع جاوا اسکریپت آماده کردم که با شرکت در این دوره شما رو آماده ورود به بازار کار میکنم. مزیت این دوره پشتیبانی دائمی دوره است که من همراه شما خواهم بود که جاوا اسکریپت رو یاد بگیرید و قدم در راه ورود به بازار کار بردارید. پیشنهاد میکنم سرفصلهای دوره و پروژه هایی که در دوره پیاده سازی شده رو ببینید:

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