Primitive (İlkel) dönüştürmeye yönelik nesne

Nesneler obj1 + obj2 eklendiğinde, obj1 – obj2 çıkarıldığında veya alert(obj) kullanılarak yazdırıldığında ne olur? JavaScript, operatörlerin nesneler üzerinde nasıl çalıştığını özelleştirmeye tam olarak izin vermez. Ruby veya C++ gibi diğer bazı programlama dillerinden farklı olarak, bir eklemeyi (veya diğer operatörleri) işlemek için özel bir nesne yöntemi uygulayamayız. Bu tür işlemlerde nesneler otomatik olarak ilkellere […]

Nesneler obj1 + obj2 eklendiğinde, obj1 – obj2 çıkarıldığında veya alert(obj) kullanılarak yazdırıldığında ne olur?

JavaScript, operatörlerin nesneler üzerinde nasıl çalıştığını özelleştirmeye tam olarak izin vermez. Ruby veya C++ gibi diğer bazı programlama dillerinden farklı olarak, bir eklemeyi (veya diğer operatörleri) işlemek için özel bir nesne yöntemi uygulayamayız.

Bu tür işlemlerde nesneler otomatik olarak ilkellere dönüştürülür ve ardından işlem bu ilkeller üzerinden gerçekleştirilir ve bir ilkel değer elde edilir.

Bu önemli bir sınırlamadır çünkü obj1 + obj2’nin sonucu başka bir nesne olamaz!

Örneğin. vektörleri veya matrisleri (veya başarıları veya her neyse) temsil eden nesneler yapamayız, onları ekleyip sonuç olarak “toplanmış” bir nesne bekleyemeyiz. Bu tür mimari başarılar otomatik olarak “tahtadan çıkar”. Yani burada pek bir şey yapamadığımız için gerçek projelerde nesnelerle matematik yok. Bu olduğunda, genellikle bir kodlama hatası nedeniyle olur.

Bu bölümde, bir nesnenin nasıl ilkele dönüştüğünü ve nasıl özelleştirileceğini ele alacağız.

İki amacımız var:

  1. Böyle bir işlem kazara gerçekleştiğinde, kodlama hataları durumunda neler olduğunu anlamamızı sağlayacaktır.
  2. Bu tür işlemlerin mümkün olduğu ve iyi göründüğü istisnalar vardır. Örneğin. tarihleri çıkarma veya karşılaştırma (Date nesneleri). Onlarla daha sonra karşılaşacağız.

Dönüşüm (conversion) kuralları

Tür Dönüşümleri bölümünde, ilkellerin sayısal, dize ve boolean dönüşümleri için kuralları gördük. Ama nesneler için bir boşluk bıraktık. Artık yöntemler ve semboller hakkında bilgi sahibi olduğumuz için onu doldurmak mümkün hale geliyor.

  1. Tüm nesneler bir boole bağlamında doğrudur. Yalnızca sayısal ve dize dönüşümleri vardır.
  2. Sayısal dönüştürme, nesneleri çıkardığımızda veya matematiksel işlevler uyguladığımızda gerçekleşir. Örneğin, Date nesneleri çıkarılabilir ve date1 – date2’nin sonucu iki tarih arasındaki saat farkıdır.
  3. Dize dönüştürmeye gelince – genellikle alert(obj) gibi bir nesneyi ve benzer bağlamlarda çıktı aldığımızda olur.

Özel nesne yöntemlerini kullanarak dize ve sayısal dönüştürmeye ince ayar yapabiliriz.

Çeşitli durumlarda gerçekleşen üç tür dönüştürme türü vardır.

Spesifikasyonda açıklandığı gibi bunlara “ipuçları” denir:

1. “string

Nesneden dizeye dönüştürme için, alert gibi bir dize bekleyen bir nesne üzerinde bir işlem yaparken:

image 2021 10 10 141837

2. “number”

Matematik yaparken olduğu gibi bir nesneden sayıya dönüştürme için:

image 2021 10 10 141842

3. “default”

Operatörün ne tür bekleyeceğinden “emin olmadığı” nadir durumlarda ortaya çıkar.

Örneğin, ikili artı + hem dizelerle (onları birleştirir) hem de sayılarla (bunları ekler) çalışabilir, böylece hem dizeler hem de sayılar işe yarar. Bu nedenle, ikili bir artı argüman olarak bir nesne alırsa, onu dönüştürmek için “default” ipucunu kullanır.

Ayrıca, bir nesne == kullanılarak bir dize, sayı veya sembol ile karşılaştırılırsa, hangi dönüşümün yapılması gerektiği de belirsizdir, bu nedenle “default” ipucu kullanılır.

image 2021 10 10 141851

< > gibi daha büyük ve daha az karşılaştırma işleçleri hem dizilerle hem de sayılarla çalışabilir. Yine de “default” değil “sayi” ipucunu kullanırlar. Bu tarihsel nedenlerden dolayı.

Ancak pratikte bu tuhaf ayrıntıları hatırlamamız gerekmez. Bir durum (Date nesnesi, daha sonra öğreneceğiz) dışında tüm yerleşik nesneler “default” dönüşümü “sayi” ile aynı şekilde uygular. Ve biz de aynısını yapabiliriz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir