عملگر توان در جاوا اسکریپت چگونه عمل می کند ؟ + بررسی و آموزش کامل
عملگر توان در جاوا اسکریپت که در «ECMAScript 2016 (ES7)» معرفی شد، روشی مختصر برای به توان رساندن اعداد در زبان برنامه نویسی جاوا اسکریپت است. این عملگر جایگزینی مناسب برای متد « Math.pow() » به منظور محاسبات توان بهحساب میآید. «سینتکس» (Syntax) این «عملگر» (اپراتور | Operator) بسیار ساده است و خوانایی کد را افزایش میدهد و از طرفی دیگر عملیات ریاضی را در برنامه نویسی جاوا اسکریپت کارآمدتر میکند. در این مطلب آموزشی از «مجله فرادرس» این بار قصد داریم که در رابطه با عملگر توان در زبان برنامه نویسی جاوا اسکریپت توضیحاتی مطلوب ارائه داده و چندین مثال عملی را برای آن به زبانی ساده و روان بررسی کنیم.
عملگر توان در جاوا اسکریپت چیست؟
جاوا اسکریپت با استفاده از عملگر توان که با علامت دو ستاره «**» نشان داده میشود، رویکردی ساده برای انجام محاسبات به توان رساندن اعداد ارائه میدهد. این عملگر فرآیند به توان رساندن اعداد را فراهم میکند و نیاز به متد استاتیک Math.pow() با سینتکس پیچیدهتر را از بین میبرد.
سینتکس متد Math.pow() برای به توان رساندن عددی خاص در مبنایی مشخص به صورت زیر است:
مثال زیر هم نحوه استفاده از این متد را نشان میدهد:
در «ECMAScript 2016»، روشی جدید برای به توان رساندن اعداد ایجاد شد. این روش با معرفی عملگر توان ( ** ) به وجود آمد که در آن از سینتکسی کاملاً جدید برای انجام این کار استفاده میشود. این عملگر به عنوان جایگزینی برای رویکرد مرسوم استفاده از تابع Math.pow() عمل میکند که سینتکس آن به صورت زیر است:
در سینتکس فوق، base به معنای عدد پایه و exponent هم نمای آن است. برای مثال اگر base برابر با ۳ و exponent برابر با ۴ باشد در نتیجه دستور بالا عدد ۳ را به توان عدد ۴ میرساند که نتیجه محاسبه عدد ۲۷ خواهد بود. هماکنون استفاده از متد Math.pow() برای چنین محاسباتی رایج نیست و بهجای آن از عملگر توان در جاوا اسکریپت استفاده میشود. عملگر توان در Javascript وضوح و کارایی کد را افزایش میدهد. مثال زیر نحوه استفاده از این عملگر را بیان میکند:
عملگر توان نهتنها با سینتکس در حال تکامل جاوا اسکریپت همسو است، بلکه به تجربه کدنویسی قابلدرکتر و آسانتر نیز کمک میکند.
نکته: در حالی که توان نوعی عملیات ریاضی رایج محسوب میشود، برخی از زبانهای برنامه نویسی از نماد ^ برای این منظور استفاده میکنند. با این حال، در مورد جاوا اسکریپت، این نماد نقش متفاوتی دارد و به عنوان نماد عملگر «XOR» به عنوان یکی از عملگرهای بیتی نقش ایفا میکند. نکته قابل توجه در رابطه با تصمیم توسعهدهندهگان جاوا اسکریپت برای استفاده از عملگر توان با علامت ** بهجای استفاده از نماد ^ نشاندهنده تعهد این زبان به ارائه سینتکسی منسجم و متمایز برای اپراتورهای مختلف است که در نهایت وضوح کد را افزایش میدهد.
مثال عملگر توان در جاوا اسکریپت
مثال زیر برای درک بهتر عملگر توان در جاوا اسکریپت آورده شده است:
برخلاف متد Math.pow() که برای محاسبه نیاز به تبدیل مقدار دارد، عملگر توان برای کار با مقادیر عددی طراحی شده است. همچنین این عملگر با نوع داده «Bigint» سازگاری دارد که در سناریوی زیر میتوان این سازگاری را مشاهده کرد.
نکته: اعداد BigInt در جاوا اسکریپت برای نشان دادن اعداد صحیح با طول دلخواه مورد استفاده قرار میگیرند. این اعداد نیز نوعی دیگری از انواع داده Number در جاوا اسکریپت محسوب میشوند و گاهی اوقات موردنیاز هستند زیرا اعداد معمولی نمیتواند بهآسانی از ۲۵۳ بیشتر شوند یا کمتر از -۲۵۳ باشند.
توجه به این نکته هم خالی از لطف نیست که اپراتور توان در جاوا اسکریپت فقط به عبارات مستقل محدود نمیشود و این عملگر نماد infix نیز قابلیت استفاده و یکپارچگی را دارد که مثال زیر این مفهوم را بیان میکند:
در اصل، عملگر توان در جاوا اسکریپت، در ارتباط با همتای خود یعنی Math.pow() ، پایهای قویتر برای محاسبه مقادیر نمایی ایجاد میکند. این عملگر چه به صورت استاندارد و چه به صورت BigInt، به تطبیقپذیری جاوا اسکریپت در مدیریت محاسبات عددی متنوع کمک خواهد کرد.
استفاده از شیء Number در جاوا اسکریپت — به زبان ساده
خطاهای رایج در استفاده از عملگر توان در Javascript
در رابطه با عملگر توان در جاوا اسکریپت، توجه به این نکته مهم است که قرار دادن نوعی عملگر «یکانی» (Unary) مستقیماً قبل از عدد پایه ممنوع است. هرگونه تلاشی برای انجام این کار باعث ایجاد نوعی «خطای نحوی» (Syntax Error) میشود. مثال زیر برای بیان این مفهوم است:
کد بالا خطای زیر را ایجاد میکند.
Uncaught SyntaxError: Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence
برای اصلاح این وضعیت باید از علامت پرانتز برای اولویت بندی محاسبات استفاده کرد. علامتهای پرانتر مورد استفاده در این رویکرد به طور مؤثر ابهام اولویت عملگرها را حل میکند که مثال زیر برای بیان این مفهوم است:
استفاده از پرانتزها برای انجام این کار نوعی احتیاط برای استفاده قوانین نحوی جاوا اسکریپت است و بر اهمیت اولویتبندی صحیح عبارات با پرانتز برای اطمینان از اجرای روان و بدون خطای تأکید میکند.
توضیحات و مثالی که در بالا آورده شد به این معنی است که کاربر وقتی میخواهد بلافاصله قبل از عدد از عملگر Unary استفاده کند (مانند علامت منفی (-)) قوانین نحوی جاوا اسکریپت این اجازه را به او نمیدهد. دلیل این امر به این مسئله بازمیگردد که جاوا اسکریپت عبارت را بهگونهای تفسیر میکند که ممکن است منجر به ابهام یا رفتار غیرمنتظره شود. برای مثال عبارت -۲**۳ را در نظر بگیرید. این محاسبات را میتوان به دو صورت مختلف تفسیر کرد: به عنوان – (۲ ** ۳) (که به معنای منفی نتیجه عبارت ۲ به توان ۳ است) یا به صورت (۲-) ** ۳ (که به معنای به توان رساندن عدد منفی ۲ به توان ۳ است). برای جلوگیری از این ابهام، جاوا اسکریپت از کاربر میخواهد که از پرانتز استفاده کرده تا بهصراحت ترتیب عملیات مورد نظر را مشخص کند.
مثالی برای اولویت بندی عملگرها در توان
هنگامیکه عبارتی به صورت a ** b ** c موجود باشد، عملیات از راست به چپ ارزیابی میشوند، به این معنی که در عبارت قبلی، نتیجه عبارت a ** (b ** c) محاسبه میشود. برای مثال متغیرهای a = 5 و “b = 2” ، c = 2 مفروض هستند و قطعه کد زیر برای آنها مدنظر است:
همانطور که گفته شد جاوا اسکریپت قانونی را اعمال میکند که در آن کاربر نمیتواند از عملگرهای یکانی خاصی ( +/-/~/!/delete/void/typeof ) بلافاصله قبل از عدد پایه در چنین عباراتی استفاده کند. تلاش برای انجام این کار منجر به خطای نحوی میشود. به عنوان مثال، عملیات زیر برای عملگر توان در جاوا اسکریپت نامعتبر هستند و نوعی خطا ایجاد میکنند:
هر یک از این عملیات منجر به نوعی Error Syntax Uncaught میشود زیرا در آنها عملگر Unary بلافاصله قبل از اعلان عملگر توان استفاده شده است. در این شرایط همانطور که بیان شد باید از پرانتز برای اولویتبندی عملگرها استفاده کرد.
برخورد عملگر توان در جاوا اسکریپت با مقادیر منفی
برخورد با اعداد منفی در زمینه استفاده از عملگر توان در Javascript مستلزم بررسی دقیقی است. مثال زیر برای درک این مفهوم اهمیت زیادی دارد.
در مثال بالا استفاده از عبارت -۲ ** ۲ به طور مستقیم به دلیل ابهام احتمالی نامعتبر است. برای روشن شدن هدف، میتوان آن را بهعنوان (-۲) ** ۲ بازنویسی کرد که به عدد ۴ ارزیابی میشود. به طور مشابه، هنگام کار با پایه منفی در توان، مانند (-۲) ** ۳ ، نتیجه برابر با -۸ خواهد شد. با استفاده از قابلیتهای پرانتز، تفسیر واضحی از عملیات توان در جاوا اسکریپت امکانپذیر است.
برخورد عملگر توان در Javascript با مقادیر NAN
انجام عملیات توان در جاوا اسکریپت شامل «NaN (Not-a-Number)» منجر به بازیابی مقدار NaN میشود که مثال زیر برای بیان این مفهوم آورده شده است.
در هر دو مورد، هر عملیات حسابی که با NaN به عنوان نوعی عملوند انجام شود، NaN را به عنوان خروجی به کاربر میدهد. این رفتار منعکس کننده ماهیت ذاتی NaN است که مقادیر تعریف نشده را در محاسبات عددی نشان میدهد.
برخورد عملگر توان در جاوا اسکریپت با مقادیر Undefined
هنگام استفاده از مقدار «تعریف نشده» ( Undefined ) در عملیات توان، مانند ۱ ** undefined ، نتیجه NaN خواهد بود که مثال زیر برای بیان این مفهوم آورده شده است:
این رفتار از این واقعیت نشاءت میگیرد که وقتی در محاسبات عددی از Undefined استفاده میشود، این مقدار Undefined به طور ضمنی به مقدار NaN تبدیل خواهد شد. در نتیجه، عبارت به ۱ ** NaN تبدیل شده که منجر به نتیجه NaN میشود.
برخورد عملگر توان مقادیر Null
هنگام اعمال عملگر توان در جاوا اسکریپت برای «مقدار تهی» (Null)، رفتار مشابه برخورد این عملگر با مقدار Undefined خواهد بود. مثال زیر برای بیان این موضوع است:
در مثال فوق Number(null) به ۰ ارزیابی میشود، در نتیجه هر عددی به توان ۰ برسد منجر به بازیابی ۱ خواهد شد. بنابراین، عبارت ۱۰ ** null به ۱۰ ** ۰ تبدیل شده و مقدار ۱ بازیابی میشود. این پدیده بر این قانون ریاضی تأکید میکند که هر عدد پایه به توان ۰ برسد نتیجه خروجی عدد ۱ خواهد بود.
سوالات متداول عملگر توان در Javascript
در این بخش چندتا از خطاهای متداول در رابطه با عملگر توان در جاوا اسکریپت ارائه خواهند شد. توجه به این سوالات به درک کاربران از عملگر توان بسیار کمک خواهد کرد.
در جاوا اسکریپت چگونه اعداد را باید به توان رساند؟
در جاوا اسکریپت دو روش برای به توان رساندن اعداد وجود دارد. روش اول استفاده از متد Math.pow است که دو عملوند را میپذیرد که عملوند اول عدد پایه و عملوند دوم عملگر توان است. همچنین میتوان از عملگر توان که با دوستاره نشان داده میشود، مابین عدد پایه و توان استفاده کرد.
برای انجام عملیات توان، Math.pow بهتر است یا عملگر توان؟
برای انجام عملیات به توان رساندن در جاوا اسکریپت، عملگر توان به دلیل سینتکسی مختصر و خوانایی اغلب به متد Math.pow ترجیح داده میشود. اپراتور توان در جاوا اسکریپت مستقیماً عملیات به توان رسانی اعداد را انجام داده و با این کار به وضوح کد کمک میکند. این عملگر در اصل نیاز به فراخوانی تابعی جداگانه را از بین میبرد و کارایی کد را بهبود میبخشد.
سخن پایانی
عملگر توان به عنوان یکی از عملگرهای جاوا اسکریپت به منظور به توان رساندن عددی پایه به توانی مشخص مورد استفاده قرار میگیرد و جایگزینی بسیار مناسب برای متد Math.pow() است. این عملگر همهکاره بوده و مقادیر عددی و حتی مقادیر Bigint را نیز در خود جای میدهد. در مطلب فوق از مجله فرادرس اطلاعاتی نسبتاً مطلوب از عملگر توان در Javascript بیان شد و در سناریوهای مختلفی اعم از به کار گرفتن در محاسبات عددی و حتی محاسبات Bigint این عملگر مورد استفاده قرار گرفت.
همچنین در مطلب فوق از مجله فرادرس، این عملگر در شرایط مختلفی مانند استفاده با مقادیر منفی، استفاده با مقادیر تعریف نشده، استفاده با مقادیر تهی و استفاده با مقادیر NaN مورد بررسی واقع شد. سازگاری عملگر توان در جاوا اسکریپت با انواع مقادیر مختلف، اهمیت آن را در زمینههای برنامه نویسی مختلف نشان میدهد. به امید اینکه مطلب فوق مورد رضایت کاربران عزیز قرار گرفته باشد.