JavaScript’te “Type Coercion” Kavramı

JavaScript’te “type coercion” kavramı, kabaca bir veri tipinin, bir başka veri tipini kendinden olmaya zorlama işlemidir diyebiliriz.

JavaScript’te “Type Coercion” Ne Demektir?

Bilindiği üzere JavaScript, farklı veri tiplerini destekleyen bir programlama dilidir. Ancak, iki farklı veri tipi arasında işlem yapıldığında JavaScript otomatik olarak bu veri tiplerinden birini diğerine dönüştürmeye çalışır. İşte bu dönüştürme işlemine, yani bir veri tipinin bir başka veri tipini kendisinden olmaya zorlama olayına “type coercion (tip zorlaması)” denir. “Peki, hangi değer tipleri coercion olmaktadır?” JavaScript’te “coercion” işlemi şu üç veri tipi arasında meydana gelmektedir. Bakınız:

  • string
  • boolean
  • number

Bilindiği üzere JavaScript’te + operatörü, sayısal verilerde toplama işlemi yapabildiği gibi string veri tipleriyle beraber kullanıldığında da “string concatenation” olarak adlandırılan bir durum ortaya çıkmaktadır. Böylece “toplanan” string ifadelerini birbirleriyle birleşmektedir. Aşağıdaki örneği inceleyiniz:

// Toplama
let a = 5;
let b = 15;
console.log(a + b); // 20
// String concatenation
let x = "Brad";
let y = "Pitt";
console.log(x + y); // BradPitt

Peki, sayısal bir veri tipi (number) ile metinsel bir veri tipi (string) arasında artı + operatorünün kullanılmasıyla ne olur dersiniz?

Bu durumda JavaScript, ilgili sayısal veri tipini metinsel veri tipine zorlayarak “type coercion” oluşturur. Aşağıdaki örneği inceleyiniz:

// String Coercion 
let a = 5; //number
let b = "15"; //string
console.log(a + b); // 515 - String 
// String Coercion 
let x = "Brad"; //string
let y = 10; //number
console.log(x + y); // Brad10 - String

Eğer sayısal bir veri tipi (number) ile metinsel bir veri tipi (string) arasında eksi - operatorü kullanılırsa, JavaScript metinsel olarak yazılmış sayısal veri tiplerini (örneğin: “15”), sayısal veri tipine zorlar. Ancak normal bir metinsel veri tipi ile eksi - opertörü kullanılırsa NaN (Not a Number) döndürür. Örneğin:

// Metinsel veri tipinde yazılmış sayısal veri tipi
let a = 5; // number
let b = "15"; // string
console.log(a - b); // -10 - number
// Metinsel 
let x = "Brad"; // string
let y = 10; // number
console.log(x - y); // NaN (Not-A-Number)

Bir değer doğrudan bir ifadeye veya kontrol yapısına (if, while gibi) verildiğinde, JavaScript bu değeri otomatik olarak bir “boolean” değere dönüştürür. Aşağıdaki örneği inceleyiniz:

// string veri tipi coercion'a uğrayıp boolean oluyor
if ("hello") {
  console.log("The string is true.");
} else {
  console.log("The string is false.");
}
// çıktı: The string is true.

Yukarıdaki örnekte, if içine yazılan metinsel veri tipi “hello” doğrudan bir ifadeye verildiğinde, JavaScript tarafından otomatik olarak boolean “true” değerine dönüştürür ve ilk koşul çalışır.

Benzer şekilde, sayısal veri tipleri de boolean bir değere dönüştürülebilir. Sıfırdan farklı tüm sayılar true olarak değerlendirilirken, 0 “false” olarak kabul edilir. Aşağıdaki örneği inceleyiniz:

// sayısal veri tipi coercion'a uğrayıp boolean oluyor
if (0) {
  console.log("The number is true.");
} else {
  console.log("The number is false.");
}
// Çıktı: The number is false.

Yukarıdaki örnekte 0, JavaScript tarafından otomatik olarak boolean false değerine dönüştürülür ve ikinci koşul çalışır.

Bilindiği üzere JavaScript’te eşit eşit midir==” operatörü iki değerin eşit olup olmadığını kontrol etmek için kullanılır. Ancak bu operatörün kullanımıyla, “type coercion” meydana gelebileceğinden beklenmedik sonuçlar gözlemlenebilir. Bakınız:

// =0 ile type coercion
console.log(false == "") // true
console.log(false == []); // true
console.log("" == 0); // true
console.log("" == []); // true
console.log(0 == []); // true
console.log(0 == false); // true

Bu nedenle eşit eşit midir==” operatörü yerine eşit eşit eşit midir===” operatörünü kullanmanızı tavsiye ederim. Daha detaylı bilgi için JavaScript equality table sayfasını ziyaret edebilirsiniz.

JavaScript’te “type coercion” kavramı, kodun tahmin edilebilirliğini azalttığı için beklenmedik sonuçlara ve hatalara yol açabilir. Bu nedenle, doğru şekilde kullanmak oldukça önemlidir.

İlgili Makaleler

Bir yanıt yazın

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

Başa dön tuşu