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.” 😄

