BigInt در جاوا اسکریپت
در این بخش به بررسی BigInt در جاوا اسکریپت می پردازیم، در زبان جاوا اسکریپت، تا قبل از معرفی نوع دادهی BigInt، تمامی اعداد به عنوان Number ذخیره میشدند که این نوع داده محدودیتهای خاصی داشت. Numberها در جاوا اسکریپت از نوع شناور ۶۴ بیتی (64-bit floating-point) هستند که به طور تقریبی تا مقدار 2^53 قابل نمایش و پردازش میباشند. این مقدار برای بسیاری از عملیاتها و محاسبات کافی است، اما در مواقعی که نیاز به پردازش اعداد بزرگتری مانند مقادیر مرتبط با رمزنگاری، الگوریتمهای خاص یا محاسبات علمی داریم، محدودیتهای این نوع داده میتواند مشکلساز شود. برای رفع این مشکل، از ECMAScript 2020، نوع دادهی BigInt معرفی شد که امکان کار با اعداد صحیح بزرگتر از محدودهی Number را فراهم میکند.
BigInt به ما این امکان را میدهد که اعداد صحیح با دقت بیشتری را ذخیره و پردازش کنیم. این نوع داده یک تغییر مهم در جاوا اسکریپت به حساب میآید، زیرا باعث میشود توسعهدهندگان بتوانند با اعداد بسیار بزرگتری کار کنند و محدودیتهای نوع دادهی Number را کنار بگذارند. همچنین، این نوع داده در حال حاضر در بسیاری از پروژهها و اپلیکیشنهای جاوا اسکریپت مورد استفاده قرار میگیرد و به سرعت در حال تبدیل شدن به یکی از ابزارهای محبوب برای توسعهدهندگانی است که نیاز به محاسبات دقیق و کار با اعداد بزرگ دارند.
1. ساختار و نحوه تعریف BigInt
ایجاد یک BigInt بسیار ساده است و جاوا اسکریپت دو روش مختلف برای تعریف این نوع داده ارائه میدهد. اولین روش، اضافه کردن پسوند n به انتهای یک عدد است. دومین روش، استفاده از تابع BigInt() برای تبدیل یک مقدار به نوع BigInt میباشد.
مثالهایی از این روشها در زیر آمده است:
let bigInt1 = 1234567890123456789012345678901234567890n; // استفاده از پسوند n
let bigInt2 = BigInt("1234567890123456789012345678901234567890"); // استفاده از تابع BigIntدر مثال اول، با افزودن n به انتهای عدد، آن را به یک BigInt تبدیل کردیم. در مثال دوم، از تابع BigInt() استفاده کردهایم که به ما امکان میدهد یک رشته عددی یا Number را به BigInt تبدیل کنیم. توجه داشته باشید که این تابع تنها اعداد صحیح را به عنوان ورودی میپذیرد و برای اعداد اعشاری به خطا خواهد انجامید.
2. ویژگیها و تفاوتهای BigInt با Number
هرچند BigInt و Number هر دو برای نمایش اعداد در جاوا اسکریپت استفاده میشوند، اما دارای تفاوتهای مهمی هستند. یکی از تفاوتهای اصلی، عدم امکان ترکیب مستقیم این دو نوع داده در محاسبات است. جاوا اسکریپت اجازه نمیدهد که عملیات ریاضی بین یک BigInt و یک Number به صورت مستقیم انجام شود و اگر این کار انجام شود به خطا میانجامد. این به دلیل تفاوت در نحوه ذخیرهسازی و محدوده هر کدام از این نوع دادههاست.
به عنوان مثال:
برای حل این مشکل، باید هر دو مقدار را به نوع دادهای یکسان تبدیل کنید؛ یا Number را به BigInt تبدیل کنید یا بالعکس. با این حال، تبدیل BigInt به Number منجر به از دست رفتن دقت میشود و توصیه نمیشود.
3. عملیاتهای ریاضی با BigInt
نوع دادهی BigInt تمامی عملیاتهای ریاضی اصلی مانند جمع، تفریق، ضرب و تقسیم را پشتیبانی میکند، اما با تفاوتهایی نسبت به Number. به عنوان مثال، تقسیم در BigInt همیشه به نزدیکترین عدد صحیح پایین گرد میشود و از اعشار صرف نظر میشود.
مثالهایی از عملیاتهای ریاضی با BigInt:
در مثال فوق، تمامی عملیاتهای ریاضی به درستی و بدون هیچ خطایی انجام شده است. در صورتی که از Number استفاده میکردیم، شاید با محدودیتهایی مواجه میشدیم.
4. مقایسه BigInt و Number
در جاوا اسکریپت، امکان مقایسه BigInt و Number با استفاده از عملگرهای مقایسهای مانند <، >, <=، >=، == و === وجود دارد. با این حال، هنگام استفاده از عملگرهای == و === باید دقت کرد. عملگر == در جاوا اسکریپت اجازه میدهد BigInt و Number با مقادیر مشابه، برابر در نظر گرفته شوند، اما === چنین اجازهای نمیدهد.
مثالهایی از مقایسه:
توجه داشته باشید که در مثال بالا، استفاده از == مقدار true بازمیگرداند، زیرا جاوا اسکریپت مقدار Number و BigInt را مقایسه میکند. اما با === این دو مقدار نابرابر هستند، چرا که نوع دادهها متفاوت است.
5. کاربردهای BigInt در پروژهها و چالشهای مرتبط
BigInt در جاوا اسکریپت کاربردهای زیادی دارد، از جمله در حوزههایی که نیاز به محاسبات دقیق با اعداد بزرگ دارند. برخی از کاربردهای BigInt عبارتاند از:
- رمزنگاری: در حوزه امنیت، رمزنگاری به طور گسترده از اعداد بزرگ استفاده میکند. الگوریتمهای رمزنگاری کلید عمومی و خصوصی نیاز به اعداد بزرگ و محاسبات دقیق دارند.
- محاسبات علمی: در بسیاری از محاسبات علمی، استفاده از اعداد بزرگ اهمیت زیادی دارد.
BigIntکمک میکند که این محاسبات بدون افت دقت انجام شوند. - شبیهسازیهای ریاضی: شبیهسازیها و محاسبات عددی که در آن اعداد بزرگ استفاده میشوند، نیاز به دقت بالا دارند و
BigIntابزار مناسبی برای این کار است.
اما استفاده از BigInt چالشهایی نیز دارد، مانند عدم پشتیبانی از محاسبات اعشاری و نیاز به تبدیل دقیق دادهها. توسعهدهندگان باید به این محدودیتها آگاه باشند و در زمان مناسب از BigInt استفاده کنند.
BigInt در جاوا اسکریپت راهحلی کارآمد برای کار با اعداد بسیار بزرگ فراهم کرده است که در گذشته با نوع دادهی Number امکانپذیر نبود. با این نوع داده، توسعهدهندگان میتوانند در پروژههای متنوعی مانند رمزنگاری، محاسبات علمی و شبیهسازیهای پیچیده از جاوا اسکریپت بهرهمند شوند. اگرچه BigInt در برخی موارد محدودیتهایی دارد، اما همچنان یک گام بزرگ در راستای گسترش قابلیتهای جاوا اسکریپت برای کار با اعداد است.
منابع
- MDN Web Docs on BigInt
- ECMAScript Language Specification
آیا این مطلب برای شما مفید بود ؟




