۶ ژوئیه ۲۰۲۳

عملگرهای پایه، ریاضیات

ما عملگرهای مختلفی را از زمان مدرسه به خاطر داریم. مانند جمع +، تفریق -، ضرب * و دیگر عملگرها.

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

اصطلاحات: یگانه (unary) – دوگانه (binary) – عملوند (operand)

پیش از ادامه بیایید مفهوم این اصطلاحات را بفهمیم.

  • عملوند – همان چیزی است که عملگرها بر روی آنها اعمال می‌شوند. برای نمونه در ضرب 5 * 2 دو عملوند داریم: عملوند سمت چپ 2 و عملوند سمت راست 5 است. برخی به جای “عملوند” آن را “آرگومان” نیز می‌خوانند.

  • یک عملگر زمانی unary است که فقط یک عملوند داشته باشد. برای نمونه منفی کننده‌ی یگانه - که علامت یک عدد را برعکس می‌کند:

    let x = 1;
    
    x = -x;
    alert( x ); // -1، منفی کننده‌ی یگانه اعمال شد
  • یک عملگر زمانی binary است که دو عملوند داشته باشد. همان عملگر منفی کننده در شکل دوگانه هم وجود دارد:

    let x = 1, y = 3;
    alert( y - x ); // 2، عملگر دوگانه منفی که مقدارها را کم می‌کند

    در اصل در مثال‌های بالا دو عملگر مجزا داریم که نماد یکسانی دارند: اولی عملگر یگانه منفی کننده که علامت عدد را برعکس می‌کرد و دیگری عملگر دوگانه تفریق که یک عدد را از دیگری کم می‌کرد.

ریاضیات

عملیات‌های ریاضی زیر پشتیبانی می‌شوند:

  • جمع‌کردن +,
  • تفریق‌کردن -,
  • ضرب‌کردن *,
  • تقسیم‌کردن /,
  • باقی‌مانده %,
  • بتوان‌رساندن **.

چهارتای اول سرراست هستند، در حالی که % و ** نیاز به توضیح بیشتری دارند.

باقی‌مانده %

عملگر باقی‌مانده %، بر خلاف ظاهرش، به درصد ارتباطی ندارد.

نتیجهٔ a % b باقی‌مانده تقسیم a بر b است.

برای مثال:

alert( 5 % 2 ); // 1، باقی‌ماندهٔ تقسیم 5 بر 2
alert( 8 % 3 ); // 2، باقی‌ماندهٔ تقسیم 8 بر 3
alert( 8 % 4 ); // باقی‌ماندۀ تقسیم 8 بر 4، 0

بتوان‌رساندن **

عملگر بتوان‌رساندن a a**b را بتوانِ b می‌رساند.

در ریاضیات مدرسه، ما آن را به صورت ab می‌نویسیم.

برای مثال:

alert( 2 ** 2 ); // 2² = 4
alert( 2 ** 3 ); // 2³ = 8
alert( 2 ** 4 ); // 2⁴ = 16

درست مانند ریاضیات، عملگر بتوان‌رساندن برای اعداد غیر صحیح نیز تعریف می‌شود.

برای مثال، جذر(ریشهٔ دوم) یک عدد با بتوان‌رساندن آن به ½ به‌دست می‌آید:

alert( 4 ** (1/2) ); // 2 (بتوان ۱/۲ با جذر آن برابر است.)
alert( 8 ** (1/3) ); // 2 (بتوان ۱/۳ با ریشهٔ سوم آن برابر است.)

تلفیق رشته‌ها با عملگر دوگانه +

بیایید خصوصیت‌های عملگرهای جاوااسکریپت که فراتر از دروس محاسباتی مدرسه است را ببینیم.

معمولا از عملگر + برای جمع اعداد استفاده می‌شود.

اما زمانی که این عملگر روی رشته‌ها اعمال شود، آنها را ادغام می‌کند.

let s = "my" + "string";
alert(s); // mystring

در نظر داشته باشید که اگر یکی از عملوندها string باشد، دیگری نیز به string تبدیل می‌شود.

برای نمونه:

alert( '1' + 2 ); // "12"
alert( 2 + '1' ); // "21"

همانطور که می‌بینید، مهم نیست که عملوند اول string باشد یا عملوند دوم.

یک مثال پیچیده‌تر:

alert(2 + 2 + '1' ); // "نتیجه "41" می‌شود نه "221

اینجا، عملگرها یکی پس از دیگری کار می‌کنند. اولین + دو عدد را جمع می‌کند، پس 4 را برمی‌گرداند، سپس + دوم رشته‌ی 1 را به آن اضافه می‌کند، پس مثل این است که بنویسیم '41' = '1' + 4.

alert('1' + 2 + 2); // "نتیجه "122" می‌شود نه "14

اینجا، اولین عملوند یک string است، کامپایلر با دو عملوند دیگر هم مانند string رفتار می‌کند. 2 با '1' ادغام می‌شود، پس مانند این است که بنویسیم "12" = 2 + '1' و سپس "122" = 2 + "12".

عملگر دوگانه + تنها عملگری است که با رشته‌ها اینگونه رفتار می‌کند. عملگرهای محاسباتی دیگر تنها با اعداد کار می‌کنند و همیشه عملوندهای خود را به عدد تبدیل می‌کنند.

اینجا یک دمو برای تفریق و تقسیم وجود دارد:

alert( 2 - '1' ); // 1
alert( '6' / '2' ); // 3

تبدیل به عدد، عملگر + یگانه

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

عملگر + یگانه، یا به عبارتی دیگر عملگر + که روی یک مقدار اعمال می‌شود، کاری روی اعداد انجام نمی‌دهد. اما اگر عملوند عدد نباشد، عملگر + یگانه آن را به عدد تبدیل می‌کند.

برای نمونه:

// تأثیری روی اعداد ندارد
let x = 1;
alert( +x ); // 1

let y = -2;
alert( +y ); // -2

// مقدار غیر عددی را تبدیل می‌کند
alert( +true ); // 1
alert( +"" );   // 0

در واقع این همان کاریست که (...)Number انجام می‌دهد ولی به شکلی کوتاه‌تر.

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

عملگر + دوگانه به صورت string آنها را بهم اضافه می‌کند: