JavaScript'te Tür Dönüşümü

  • Konbuyu başlatan Konbuyu başlatan Hüseyin
  • Başlangıç tarihi Başlangıç tarihi

Hüseyin

Üye
Katılım
21 Ocak 2024
Mesajlar
174
Tepkime puanı
40
Puanları
28
Bazen, programın beklendiği gibi çalışması için bir veri türünü diğerine dönüştürmek isteyebilirsiniz.

Örneğin, sayılar arasında toplama işlemi yapabilmek için bir dizeyi tamsayıya dönüştürmeniz gerektiğini varsayalım.

Sayılardan birini dize olarak alırsanız, JavaScript toplama işlemi yerine bunları birleştirir:
JavaScript:
let x = "7";
let y = 5;

console.log(x + y); // 75

İki sayıyı düzgün bir şekilde toplamak için x değişkenini bir tamsayıya dönüştürmeniz gerekir.

Verilerin bir türden diğerine değiştirilmesi, tür dönüştürme veya tür dökümü olarak da bilinir. Tür dönüşümü yapmak için sıklıkla kullanılan 3 fonksiyon vardır:

Number()
String()
Boolean()


Adlarından da anlaşılacağı gibi, bu tür dönüştürme işlevleri parantez içinde belirttiğiniz herhangi bir değeri aynı addaki türe dönüştürmeye çalışır.

Bir dizeyi integer'a dönüştürmek için int() fonksiyonunu kullanabilirsiniz:
JavaScript:
let x = "7";
let y = 5;

// Convert x to integer
x = Number(x);

console.log(x + y); // 12

Öte yandan, String() işlevi başka türden bir değeri bir dizeye dönüştürür. String(true) yazarsanız, 'true' değerini geri alırsınız.

İşlevle aynı türden bir değer geçirmenin hiçbir etkisi yoktur. Sadece aynı değeri geri döndürür.

Tür zorlaması

JavaScript'te tür zorlaması, bir türdeki değerin dolaylı olarak başka bir türe dönüştürüldüğü bir işlemdir.

Bu işlem JavaScript tarafından otomatik olarak yapılır, böylece kodunuz bir hataya neden olmaz. Ancak bu bölümde göreceğiniz gibi, tür zorlaması aslında programda istenmeyen davranışlara neden olabilir.

JavaScript'te bir sayı ile bir dize arasında toplama işlemi yaptığınızda ne olacağını düşünelim:

JavaScript:
console.log(1 + "1");

Önceki bölümde gördüğünüz gibi, JavaScript sayıyı bir dize olarak kabul edecek ve iki harfi toplamak yerine 11 olarak birleştirecektir (1 + 1 = 2)

Ancak diğer programlama dillerinin aynı şekilde yanıt vermediğini bilmeniz gerekir.

Ruby veya Python gibi programlama dilleri programınızı durdurarak ve geri bildirim olarak bir hata vererek yanıt verecektir. (Cannot perform addition between a number and a string)“Bir sayı ile bir dize arasında toplama işlemi gerçekleştirilemiyor” gibi bir yanıt verecektir.

Ancak JavaScript bunu görecek ve şöyle diyecektir: “İstediğiniz işlemi bu haliyle yapamam, ancak 1 sayısı bir dizeye dönüştürülürse yapabilirim, bu yüzden sadece bunu yapacağım.”

İşte tür zorlaması tam olarak budur. JavaScript kodunuzu nasıl çalıştıracağını bilmediğini fark eder, ancak programı durdurmaz ve bir hata ile yanıt vermez.

Bunun yerine, değerlerden birinin veri türünü size söylemeden değiştirir.

Tür zorlaması herhangi bir hataya neden olmasa da, çıktı aslında sizin de istemediğiniz bir şeydir.

Tür zorlama kuralları

Görünüşe göre JavaScript farklı veri tipleri bulduğunda ilk olarak veri tiplerini string'e çevirecek:
JavaScript:
1 + "1" // "11"
[1 ,2] + "1" // "1,21"
true + "1" // "true1"

Ancak bir nesneye sahip olduğunuzda değerlerin sırası önemlidir. Önce nesneleri yazmak her zaman sayısal 1 döndürür:
JavaScript:
{ a: 1 } + "1" // 1
"1" + { a: 1 } // "1[object Object]"
true + { a: 1 } // "true[object Object]"
{ a: 1 } + 1 // 1

JavaScript boolean ve sayısal türler arasında hesaplama yapabilir, çünkü boolean değerleri true ve false dolaylı olarak 1 ve 0 sayısal değerine sahiptir:
JavaScript:
true + 1 // 1+1 = 2
false + 1 // 0+1 = 1
[1,2] + 1 // "1,21"

Tür zorlaması her zaman örtük olarak gerçekleştirilir. Değeri bir değişken olarak atadığınızda, değişken türü işlem dışında asla değişmez:
JavaScript:
let myNumber = 1;
console.log(myNumber + "1"); // prints 11
console.log(myNumber); // hala string değil 1 sayısını yazdırıyor

Kendi başınıza daha fazlasını bulmaya çalışabilirsiniz, ancak umarım şimdiye kadar tür zorlamasının ne olduğunu ve nasıl çalıştığını anlamışsınızdır.
Neden tür zorlamasından kaçınmalısınız?

JavaScript geliştiricileri, tip zorlaması hakkında konuşurken genellikle iki kampa ayrılır:

Bunun bir özellik olduğunu düşünenler
Bunun bir hata olduğunu düşünenler


Her zaman tür zorlaması kullanmaktan kaçınmanızı tavsiye ederim.

Bunun nedeni, çözüm için tür zorlamasının gerekli olduğu bir sorunla hiç karşılaşmamış olmam ve bir türü diğerine dönüştürmem gerektiğinde, bunu açıkça yapmanın her zaman daha iyi olmasıdır:

JavaScript:
let price = "50";
let tax = 5;

let totalPrice = Number(price) + Number(tax);

console.log(totalPrice);

Number() ve String() gibi açık tür dönüştürme işlevlerini kullanmak kodunuzu açık ve şeffaf hale getirecektir. Programınızda gerekli olan doğru veri türünü tahmin etmeniz gerekmez.

Tip zorlaması, JavaScript'te yeni başlayanların kafasını karıştırabilecek benzersiz özelliklerden biridir, bu nedenle bunu erkenden açıklığa kavuşturmak iyidir.
 
Geri
Üst