23 Haziran 2016 Perşembe

Javascript'de Number Nesnesi

Merhaba Webkolog Okuyucuları!

Bugün JavaScript'in en temel veri tiplerinden biri olan Sayılar (Numbers) ve bu sayıların arkasındaki güçlü Number Nesnesi hakkında konuşacağız. JavaScript'te sayılar, hem tam sayılar hem de ondalıklı sayılar için tek bir veri tipi olarak kullanılır. Ancak işin içine daha karmaşık matematiksel işlemler, sayısal sınırlar veya sayıların doğruluğunu kontrol etme gibi durumlar girdiğinde, Number nesnesinin sunduğu özellikler ve metotlar devreye girer. Hadi, sayıların bu derinliklerine bir göz atalım!


Number Nedir ve Neden Önemlidir?

JavaScript'te sayılar, çift duyarlıklı 64-bit IEEE 754 formatında saklanır. Bu, hem çok büyük hem de çok küçük sayıları temsil edebileceğimiz anlamına gelir. Temel aritmetik işlemler için sayıları doğrudan kullanırız. Ancak, Number nesnesi, bu sayısal değerler üzerinde daha gelişmiş işlemler yapmamızı sağlayan statik özellikler (sabitler) ve prototip metotları sunar.

Number nesnesini anlamak, özellikle şu durumlarda kritik öneme sahiptir:

  • Sayısal değerlerin geçerliliğini kontrol etme.
  • Sayıları belirli bir formatta görüntüleme (para birimi, bilimsel gösterim vb.).
  • Sayısal sınırları ve özel sayısal değerleri yönetme.

Number Nesnesinin Özellikleri (Sabitler)

Number nesnesi, sayılarla çalışırken işimize yarayan bazı özel sabit değerleri barındırır:

  • Number.MAX_VALUE: JavaScript'te temsil edilebilecek en büyük pozitif sayıdır (yaklaşık 1.7976931348623157e+308). Bu değeri aşan sayılar Infinity olur.
    
                console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
            
  • Number.MIN_VALUE: JavaScript'te temsil edilebilecek sıfıra en yakın pozitif sayıdır (yaklaşık 5e-324). Bu değerden küçük ve sıfırdan büyük sayılar, "sıfır" olarak kabul edilebilir (denormalize sayılar).
    
                console.log(Number.MIN_VALUE); // 5e-324
            
  • Number.NEGATIVE_INFINITY: Negatif sonsuzluğu temsil eder. Bir sayıyı negatif sıfıra bölme gibi durumlarda ortaya çıkar.
    
                console.log(-1 / 0); // -Infinity (Number.NEGATIVE_INFINITY ile aynı)
            
  • Number.POSITIVE_INFINITY: Pozitif sonsuzluğu temsil eder. Bir sayıyı sıfıra bölme gibi durumlarda ortaya çıkar.
    
                console.log(1 / 0); // Infinity (Number.POSITIVE_INFINITY ile aynı)
            
  • Number.NaN: "Not-a-Number" (Sayı Değil) özel bir sayısal değeridir. Geçersiz veya tanımsız matematiksel işlemlerin sonucunda oluşur (örneğin, bir string'i sayıya dönüştürmeye çalışmak).
    
                console.log(0 / 0);       // NaN
                console.log("abc" * 5);   // NaN
            
  • Number.EPSILON (ES6+): 1 ile 1'den büyük olan en küçük kayan nokta sayısı arasındaki farkı temsil eder. Kayan nokta aritmetiğindeki hassasiyet hatalarını kontrol etmek için faydalıdır.
    
                console.log(Number.EPSILON); // 2.220446049250313e-16
            
  • Number.MAX_SAFE_INTEGER (ES6+): JavaScript'te tam sayı olarak güvenle temsil edilebilecek en büyük sayıdır (253 - 1). Bu değerden büyük tam sayılarda hassasiyet kayıpları yaşanabilir.
    
                console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
            
  • Number.MIN_SAFE_INTEGER (ES6+): JavaScript'te tam sayı olarak güvenle temsil edilebilecek en küçük sayıdır (-(253 - 1)).
    
                console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991
            

Number Nesnesinin Metotları

Bu metotlar, sayısal değerler üzerinde işlem yapmak veya formatlamak için kullanılır.

1. Sayıyı String'e Dönüştürme ve Biçimlendirme
  • toExponential(fractionDigits): Bir sayıyı üstel gösterim (e-gösterimi) şeklinde bir string olarak döndürür. İsteğe bağlı fractionDigits parametresi, ondalık noktadan sonra kaç basamak olacağını belirler.
    
                let buyukSayi = 123456789;
                console.log(buyukSayi.toExponential());    // 1.23456789e+8
                console.log(buyukSayi.toExponential(2));   // 1.23e+8
            
  • toFixed(digits): Bir sayıyı, belirtilen sayıda ondalık basamağa sahip bir string olarak biçimlendirir. Yuvarlama yapar.
    
                let fiyat = 123.45678;
                console.log(fiyat.toFixed(2));   // "123.46" (Yuvarlama yapar)
                console.log(fiyat.toFixed(0));   // "123"
            
  • toPrecision(precision): Bir sayıyı, belirtilen toplam basamak sayısına sahip bir string olarak biçimlendirir (nokta ayracı hariç). Gerekirse üstel gösterimi kullanır.
    
                let hassasSayi = 987.654321;
                console.log(hassasSayi.toPrecision(4)); // "987.7" (Toplam 4 basamak)
                console.log(hassasSayi.toPrecision(7)); // "987.6543" (Toplam 7 basamak)
            
  • toString(radix): Bir sayıyı string olarak döndürür. İsteğe bağlı radix parametresi, hangi sayı tabanında (2'lik, 10'luk, 16'lık vb.) gösterileceğini belirler.
    
                let sayi = 255;
                console.log(sayi.toString());    // "255" (Varsayılan 10'luk taban)
                console.log(sayi.toString(16));  // "ff" (16'lık taban - hexadecimal)
                console.log(sayi.toString(2));   // "11111111" (2'lik taban - binary)
            
  • valueOf(): Bir Number nesnesinin ilkel sayısal değerini döndürür. Genellikle JavaScript tarafından otomatik olarak çağrılır ve manuel olarak kullanmanız nadirdir.
    
                let myNumber = new Number(10);
                console.log(myNumber.valueOf()); // 10
                console.log(typeof myNumber.valueOf()); // number
            
  • toLocaleString(locales, options) (ES6+): Sayıyı yerel ayar kurallarına göre biçimlendirerek bir string döndürür. Para birimi, tarih vb. formatlar için çok kullanışlıdır.
    
                let buyukPara = 1234567.89;
                console.log(buyukPara.toLocaleString('tr-TR', { style: 'currency', currency: 'TRY' })); // 1.234.567,89 TL
                console.log(buyukPara.toLocaleString('en-US', { style: 'currency', currency: 'USD' })); // $1,234,567.89
            
2. Sayısal Değer Kontrol Metotları (Statik)

Bu metotlar doğrudan Number nesnesi üzerinden çağrılır ve bir değerin sayısal niteliklerini kontrol eder.

  • Number.isInteger(value) (ES6+): Verilen değerin bir tam sayı olup olmadığını kontrol eder (true/false).
    
                console.log(Number.isInteger(10));     // true
                console.log(Number.isInteger(10.0));   // true
                console.log(Number.isInteger(10.5));   // false
                console.log(Number.isInteger("10"));   // false (string)
            
  • Number.isFinite(value) (ES6+): Verilen değerin sonlu bir sayı olup olmadığını kontrol eder (yani Infinity, -Infinity veya NaN değilse true). Global isFinite()'den farkı, argümanı sayıya dönüştürmeye çalışmamasıdır.
    
                console.log(Number.isFinite(10));      // true
                console.log(Number.isFinite(Infinity)); // false
                console.log(Number.isFinite("10"));    // false (string olduğu için)
            
  • Number.isNaN(value) (ES6+): Verilen değerin NaN olup olmadığını kontrol eder. Global isNaN()'den farkı, argümanı sayıya dönüştürmeye çalışmamasıdır. Yalnızca doğrudan NaN olan değerler için true döner.
    
                console.log(Number.isNaN(NaN));        // true
                console.log(Number.isNaN(123));        // false
                console.log(Number.isNaN("Merhaba"));  // false ("Merhaba" direkt NaN değil, NaN'a dönüşür)
                console.log(Number.isNaN("10"));       // false
            
  • Number.parseFloat(string) (ES6+): String'i bir ondalıklı sayıya dönüştürür. Global parseFloat() ile aynıdır.
    
                console.log(Number.parseFloat("3.14"));  // 3.14
                console.log(Number.parseFloat("3.14 elma")); // 3.14
            
  • Number.parseInt(string, radix) (ES6+): String'i bir tam sayıya dönüştürür. Global parseInt() ile aynıdır.
    
                console.log(Number.parseInt("100px")); // 100
                console.log(Number.parseInt("101", 2)); // 5
            

Sonuç

JavaScript'te sayılarla çalışmak ilk bakışta basit gibi görünse de, Number nesnesi ve sunduğu özellikler/metotlar, sayısal veriler üzerinde daha kontrollü ve esnek işlemler yapmamızı sağlar. Özellikle finansal uygulamalar, bilimsel hesaplamalar veya kullanıcı girdilerinin doğrulanması gibi alanlarda bu bilgileri bilmek size büyük avantaj sağlayacaktır. Sayısal sınırları, biçimlendirme seçeneklerini ve değer kontrol metotlarını anlamak, daha sağlam ve hatasız kodlar yazmanıza yardımcı olur.

Unutmayın, her zaman mümkün olduğunca ilkel sayısal değerleri kullanmaya çalışın ve Number nesnesini ancak özel ihtiyaçlarınız olduğunda (biçimlendirme, doğrulama gibi) çağırın. Pratik yaparak bu metotlara hakim olun!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve başarılı projeler dilerim!

0 yorum:

Yorum Gönder