JavaScript’de BigInt

JavaScript’de BigInt

Büyük Sayılarla Kavga Etmeden Yaşamanın Yolu 🚀

JavaScript yazıyorsun.
Her şey güzel gidiyor.
Sonra bir sayı büyüyor…
Ve JS şöyle diyor:

“Ben buradan sonrasını yuvarlıyorum ya, sen idare et.”

İşte BigInt, JavaScript’in:

“Tamam tamam, bu sefer ciddiyim.”
dediği noktadır.


1️⃣ JavaScript’te Sayılar Aslında Ne?

JavaScript’te tek bir sayı tipi vardır:

Number

Ama bu sayı tipi:

  • Tam sayı, ondalık, negatif → hepsi aynı kapta
  • IEEE 754 standardına göre çalışır
  • Yani… her tam sayı %100 güvenli değil

Güvenli sınır nedir?

Number.MAX_SAFE_INTEGER

Çıktı:

9007199254740991

Yani JS diyor ki:

“Bu sayıya kadar söz veriyorum, sonrası muamma.”


2️⃣ “Yuvarlama Faciası” Nasıl Oluyor?

Bir deney yapalım 🧪

const max = Number.MAX_SAFE_INTEGER;

console.log(max + 1);
console.log(max + 2);

Sonuç:

9007199254740992
9007199254740992

😐
İki farklı işlem, aynı sonuç.

Sebep?

  • JS sayıları ikili (binary) tutar
  • Büyük sayılarda bit yetmez
  • Detay kaybolur

Tıpkı:

4K video çekip disketle saklamaya çalışmak gibi.


3️⃣ BigInt Sahneye Çıkıyor 🎩

BigInt, JavaScript’e şunu kazandırır:

  • Gerçek tam sayı matematiği
  • Yuvarlama yok
  • Kayma yok
  • “Yaklaşık” kelimesi yok

4️⃣ BigInt Nasıl Yazılır? (En Kolay Kısım)

Yöntem 1: n takısı

const ageOfUniverse = 13800000000n;

Buradaki n şunu söyler:

“Bu sayı normal değil, BigInt.”

Yöntem 2: BigInt() constructor

const hugeId = BigInt("123456789123456789123456789");

💡 İpucu:
String vermek güvenlidir çünkü:

  • Sayı JS tarafından bozulmadan alınır

5️⃣ BigInt ile Toplama, Çıkarma, Çarpma 🧮

const a = 999999999999999999n;
const b = 1n;

console.log(a + b);

Sonuç:

1000000000000000000n

Açıklama:

  • İki sayı da BigInt
  • JS “yuvarlayayım mı?” diye sormaz
  • Direkt hesaplar

Çarpma:

10n * 20n
// 200n

Çıkarma:

100n - 30n
// 70n


6️⃣ Büyük TUZAK: Number + BigInt ❌

10n + 5

🚨 TypeError

JS burada diyor ki:

“Biriniz elma, biriniz armut. Toplamam.”

Doğrusu:

10n + 5n

Ya da dönüştür:

10n + BigInt(5)

💡 Altın kural:
👉 Aynı matematikte tek tür kullan.


7️⃣ Bölme: BigInt’in Sevmediği Şey 😅

10n / 3n

Sonuç:

3n

Kalan?

  • Yok
  • Umursanmıyor

BigInt diyor ki:

“Ben tam sayıyım, virgül falan sevmem.”

Ondalık lazımsa:

Number(10n) / 3

Ama dikkat ⚠️
Bu noktada Number dünyasına geri dönmüş olursun.


8️⃣ Karşılaştırmalar (Burada Şaşırma)

10n > 5
// true

Bu çalışır 👍

Ama:

10n === 10
// false

Sebep:

  • Türler farklı
10n == 10
// true (ama kullanma)

💡 İpucu:
=== kullan, hayat daha az karmaşık olur.


9️⃣ BigInt ve JSON Problemi ⚠️

JSON.stringify(10n);

💥 Hata!

JSON:

  • BigInt tanımaz
  • “Ben sadece Number biliyorum” der

Çözüm:

JSON.stringify({
  value: 10n.toString()
});

📌 Network, API, DB tarafında string’e çevir.


🔟 Gerçek Hayatta BigInt Nerede Kullanılır?

🏦 Finans

const totalMoney = 999999999999999999n;

🔐 Kriptografi

const privateKey = BigInt("0x123456789ABCDEF");

🧾 Dev ID’ler

const userId = 987654321987654321n;

Burada hata kabul edilemez.
BigInt tam bu noktada parlar ✨


1️⃣1️⃣ Performans Uyarısı 🚦

BigInt:

  • Güçlü 💪
  • Ama yavaş 🐢

Küçük hesaplar için:

“Number yeter kardeşim.”

BigInt’i:

  • Gerçekten büyük sayılar için sakla

1️⃣2️⃣ Mini İpuçları (Altın Değerinde)

💡 Math objesi çalışmaz

Math.sqrt(10n); // ❌

💡 ParseInt ile dönüştürme yok

parseInt(10n); // ❌

💡 Binary, Hex destekli

0b101010101010101010101n


🎯 Özet (Okumaya Üşenenler İçin 😄)

  • Number → hızlı ama sınırlı
  • BigInt → yavaş ama güvenilir
  • Karıştırma ❌
  • Büyük sayı = BigInt ✅

Son söz:

“JavaScript sayılarla dalga geçmez…
ama sen sınırı aşarsan o da seni ciddiye almaz.”
😄

Comments

No comments yet. Why don’t you start the discussion?

Bir yanıt yazın

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