اعداد در جاوا اسکریپت
متغیرهای عددی از پرکاربردترین انواع داده در اکثر زبانهای برنامهنویسی هستند. اعداد را میتوان به دو دسته تقسیم کرد. اعداد صحیح (Integer) و اعداد اعشاری (Float). در بسیاری از زبانهای برنامهنویسی (به طور خاص در زبانهای کامپایلری)، اعداد صحیح و اعداد اعشاری دو نوع دادهی متفاوت هستند. اما در جاوا اسکریپت هر دو از نوع Number به حساب میآیند. مشاهدهی قطعه کد زیر و خروجیهای آن نشان میدهد که در جاوا اسکریپت همهی اعداد از نوع Number هستند.
typeof 20
← "number"
typeof 3.23
← "number"
اما در برنامهنویسی در برخی شرایط خاص، لازم است تا صحیح یا اعشاری بودن یک عدد را تشخیص داده و بر مبنای آن تصمیمی بگیریم. لذا در ES6 متدی به نام isInteger تعریف شده است که میتواند صحیح بودن یا نبودن یک عدد را مشخص کند. این متد متعلق به شئ Number است. در نتیجه برای استفاده از این متد باید به شکل زیر عمل کنیم.
Number.isInteger(22);
← true
Number.isInteger(3.14);
← false
به نحوهی نوشتن دستورات فوق کمی دقت کنید. همانطور که اشاره شد، "متد isInteger متعلق به شئ Number است". اما این جمله به چه معنی است؟ برای درک دقیق معنی این جمله، لازم است تا با مفاهیمی مانند "تابع"، "شئ" و "متد" آشنا شوید. البته برای بیان دقیق این مفاهیم به چندین صفحه توضیح نیاز است. اما فعلاً تا زمان رسیدن به مباحث مربوطه، چند تعریف ساده از هر یک از این مفاهیم ارائه میکنیم تا در زمان مناسب، توضیحات تکمیلی در مورد هر یک از این مفاهیم ارائه شود.
- تابع : تقریباً مشابه مفهوم تابع در ریاضیات است. یعنی یک عملگر است که میتواند یک یا چند مقدار ورودی را دریافت کرده و با انجام محاسبات لازم، خروجی متناسب با ورودیها را تولید کند (یا اصطلاحاً خروجی را بازگرداند). به عنوان مثال میتوانیم به توابع محاسباتی ریاضی که در بیشتر زبانهای برنامهنویسی وجود دارند اشاره کنیم. مثلاً تابع sin یک عدد را به عنوان زاویه دریافت کرده، و سینوس آن زاویه را محاسبه کرده و به عنوان خروجی برمیگرداند.
- شئ : یک مدل از یک موجودیت در دنیای واقعی است. یا به زبان سادهتر "شئ" در برنامهنویسی، مدل ساده شدهی همان "شئ" در دنیای واقعی است. مثلاً یک اتومبیل یک "شئ" در دنیای واقعی است. هر شئ در دنیای واقعی دارای تعدادی خاصیت و رفتار است. مثلاً در مورد اتومبیل میتوان به خاصیتهایی مانند رنگ، وزن، قیمت، سرعت فعلی، سال تولید، میزان سوخت داخل باک، شرکت سازنده و ... اشاره کرد. همچنین هر اتومبیل رفتارهایی مانند افزایش سرعت (یا گاز دادن)، کاهش سرعت (یا ترمز کردن)، مصرف سوخت و ... دارد. در واقع خاصیتهای یک شئ، در اثر رفتارهای آن شئ ممکن است تغییر کنند. مثلاً در مورد اتومبیل رفتارهای گاز دادن و ترمز کردن، موجب تغییر در خاصیت سرعت فعلی میشوند. یا رفتار مصرف سوخت، موجب تغییر در خاصیت میزان سوخت داخل باک میشود.
- متد : متد در واقع یک تابع است که برای شبیهسازی رفتارهای یک شئ (و احتمالاً تغییر خاصیتهای آن) تعریف میشود. مثلاً در یک برنامه ممکن است یک شئ به نام car برای مدلسازی یک اتومبیل تعریف شده باشد. داخل این شئ میتوان تابعی به نام speedUp تعریف کرد تا رفتار گاز دادن را شبیهسازی کند. پس توابعی که متعلق به یک شئ باشند را متد مینامیم.
حال باید به این موضوع اشاره شود که در جاوا اسکریپت تعدادی شئ از پیش تعریف شده (Built-in) وجود دارد که هر یک برای اهداف مشخصی به کار میروند. یکی از این اشیاء، شئ Number است که برای کار کردن با اعداد به کار برده میشود. این شئ دارای چندین متد برای انجام انواع محاسبات و پردازشهای مختلف بر روی اعداد است که یکی از این متدها، متد isInteger است که پیشتر کاربرد آن را دیدیم. این متد یک عدد را به عنوان ورودی دریافت میکند. سپس بررسی میکند که عدد وارد شده صحیح است یا اعشاری. در صورتی که عدد وارد شده صحیح باشد مقدار true و در غیر این صورت مقدار false را بازمیگرداند.
جهت استفاده از توابع (و همچنین متدها)، باید مقدار ورودی را بعد از نام تابع، داخل پرانتز قرار دهیم. حال اگر این تابع متعلق به یک شئ باشد (یعنی یک متد باشد)، باید نام آن شئ را نیز قبل از نام تابع قرار داده و با یک نقطه آنها را از هم جدا کنیم. لذا برای استفاده از متد isInteger باید به صورت زیر عمل کنیم.
Number.isInteger(22);
← true
Number.isInteger(3.14);
← false
از این پس به مرور با تعداد زیادی از توابع، اشیاء و متدهای جاوا اسکریپت و کاربرد آنها آشنا خواهید شد. و خواهید دید که بدون استفاده از آنها، برنامهنویسی تقریباً غیر ممکن است.
روشهای تعریف و استفاده از متغیرهای عددی
برگردیم به بحث اصلی، یعنی متغیرهای عددی. برای تعریف متغیرهای عددی، مانند سایر انواع داده در جاوا اسکریپت، میتوان از یکی از کلمات کلیدی var یا let استفاده کرد. همچنین برای تعریف یک ثابت عددی نیز میتوان از کلمهی کلیدی const استفاده کرد. چند نمونه از حالتهای مختلف تعریف متغیرها و ثابتهای عددی را در قطعه کد زیر میبینید.
let num1; // یک متغیر عددی بدون مقدار اولیه
let num2 = 22; // یک متغیر عددی با مقدار اولیه 22 که یک عدد صحیح است
const num3 = 3.14; // یک ثابت عددی با مقدار اعشاری 3.14
let num4 = num2 * num3 + 30; // یک متغیر عددی با مقدار اولیهی 99.08
در بیشتر مواقع، مقادیر عددی به صورت دهدهی (Decimal)، یعنی در مبنای ۱۰ نوشته میشوند. چرا که خواندن، نوشتن و محاسبه کردن اعداد در این مبنا برای انسان راحتتر است. اما در برنامهنویسی بعضاً بهتر است که اعداد را در مبناهای دیگری بنویسیم. در جاوا اسکریپت امکان نوشتن اعداد در مبنای ۲ (Binary)، مبنای ۸ (Octal) و مبنای ۱۶ (Hexadecimal) وجود دارد.
برای نوشتن یک عدد در مبنای ۲، باید آن عدد را با پیشوند "0b" شروع کنیم. برای نوشتن یک عدد در مبنای ۸ باید آن عدد را با پیشوند "0o" (عدد صفر و حرف "o") شروع کنیم. و برای نوشتن اعداد در مبنای ۱۶ نیز باید از پیشوند "0x" استفاده کنیم. به عنوان مثال در قطعه کد زیر، عدد ۴۰ در مبناهای مختلف نوشته شده است.
let decimal = 40;
let binary = 0b101000;
let octal = 0o50;
let hex = 0x28;
همچنین میتوانید اعداد را به صورت نمایی (یا نماد عملی) نمایش دهید. در این روش اعداد به صورت مضربی از توانی از ۱۰ نمایش داده میشوند. برای نمایش این اعداد ابتدا مضرب، سپس کاراکتر e یا E و بعد از آن توان را قرار میدهیم. چند نمونه از این نوع نمایش را در قطعه کدی زیر میبینید.
let num1 = 2e6; // 2 * 10 ^ 6 = 2000000
let num2 = 8.333E5; // 8.333 * 10 ^ 5 = 8.33300
let num3 = 2.3e-4; // 2.3 * 10 ^ -4 = 0.00023
توجه کنید که تفاوتی ندارد که با چه روشی اعداد را تعریف میکنید. مهم مقداری است که تعیین میکنید. ضمناً در خروجی (کنسول)، اعداد همیشه به صورت دهدهی نمایش داده میشوند. به عنوان مثال به دستورات اجرا شده در قطعه کد زیر توجه کنید. در تمام دستورات مقدار وارد شده به صورت دهدهی در خروجی نمایش داده شده است.
0x11;
← 17
0b1110;
← 14
2.5e6;
← 2500000
2.3e-4;
← 0.00023
پس در این بخش با روشهای مختلف تعریف و استفاده از متغیرهای عددی و نحوهی تشخیص صحیح یا اعشاری بودن اعداد با متد isInteger آشنا شدیم. همچنین با چند مفهوم مهم به نامهای تابع، شئ و متد به صورت مقدماتی آشنا شدیم. در بخش بعدی در رابطه با یکی دیگر از انواع دادهی مهم در جاوا اسکریپت، یعنی رشتهها (Strings) صحبت خواهیم کرد.