JavaScript’te “BigInt” Kavramı

JavaScript’te “BigInt” kavramı, büyük tam sayıları temsil etmek için kullanılan bir primetive (ilkel) bir veri tipidir.

JavaScript’te “BigInt” Kullanımı

ECMAScript 2020 (ES11) güncellemesiyle JavaScript’e dahil edilen BigInt, çok büyük tam sayıların kullanıldığı kriptografi, finansal hesaplamalar gibi uygulamalar için daha doğru ve güvenilir bir veri tipi sağlar.

Zira JavaScript’te, Number veri tipi IEEE 754 standardına göre çift hassasiyetli 64-bit kayan nokta formatındaki sayıları temsil edilir. Yani bu demektir ki, “Number” veri tipinin güvenli bir şekilde temsil edebileceği en büyük tam sayı (2^53 – 1 veya yaklaşık olarak 9 x 10^15) bazı uygulamalar için yetmemektedir.

Her ne kadar, çok büyük tam sayılar yazılabilse de, büyük sayılarda hassasiyet riski oluşur ve doğru bir şekilde temsil edilemez.

“BigInt”, JavaScript’te “n” ile oluşturulur. Örneğin, 12345678901234567890n gibi bir değer “BigInt” olarak yazılmıştır. İkinci bir yöntem olarak, BigInt() “constructor” fonksiyonu da kullanılabilir, örneğin BigInt("12345678901234567890"). İki veri tipini karşılaştırmak adına aşağıdaki örneği inceleyiniz:

//Number
typeof 37 === "number";
typeof 3.14 === "number";
typeof 42 === "number";
typeof Math.LN2 === "number";
typeof Infinity === "number";
typeof NaN === "number"; // anlamı "Not-A-Number" olmasına rağmen Number veri tipi kabul edilir
typeof Number("1") === "number"; // tip zorlaması (type coercion) yaparak Number veri tipi oluyor
typeof Number("shoe") === "number"; // sayı olmasa dahi sayı yapar

//BigInt
typeof 42n === "bigint";

❗ Ancak “Number” veri tipi ile “BigInt” arasındaki farklılıklar sadece sayısal sınırlılıklarda kalmamaktadır. “BigInt” ile yapılan aritmetik işlemler, normal “Number” tipindeki işlemlerden farklı olarak, yalnızca tam sayılarla çalışır ve kesirli sayılarla çalışmadığı gibi kesirli sonuçlar da üretmez. Örneğin, “BigInt” olarak yazılmış tam sayı ile yapılan bölme işlemleri sonucu yuvarlanır ve tam sayı olarak döner. Bakınız:

// Number veri tipi
let num1 = 5;
let num2 = 2;

let result = num1 / num2;
console.log(result); // 2.5


// BigInt 
let bigInt1 = 5n;
let bigInt2 = 2n;

let bigIntResult = bigInt1 / bigInt2;
console.log(bigIntResult); // 2n

Bir diğer fark olarak, “BigInt” ve “Number” türleri arasında otomatik dönüşüm yapılmaz ve bu türlerle yapılan işlemler tip uyumsuzluğu (type coercion olmaz) ortaya çıkar.

// Number & BigInt
let bigIntValue = 42n;
let numberValue = 7;

// Aşağıdaki işlem, "TypeError: Cannot mix BigInt and other types" hatası verir
let incorrectResult = bigIntValue + numberValue;

JavaScript’te “Number” veri tipi ile “BigInt” bir veri tipini birleştirmek veya karşılaştırmak istiyorsanız, türleri manuel olarak dönüştürmeniz gerekmektedir. Örneğin:

// Number & BigInt
let bigIntValue = 42n;
let numberValue = 7;

// Number değerini BigInt'e dönüştür
let convertedNumber = BigInt(numberValue);

// İşlemi gerçekleştir
let correctResult = bigIntValue + convertedNumber;

console.log(correctResult); // 49n

Benzer şekilde iki veri tipini karşılaştırma işlemi için de manuel olarak dönüşüm yapmamız gerekmektedir. Örnek olarak:

// Number & BigInt
let bigIntValue = 42n;
let numberValue = 42;

// Number değerini BigInt'e dönüştür ve karşılaştırma yap
let areEqual = bigIntValue === BigInt(numberValue);

console.log(areEqual); // true

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu