ProgramlamaFrontend geliştirici

TypeScript'te let, const ve var kullanarak değişkenlerin ilanı arasındaki farkı açıklayın. Seçimlerinin kapsam, yeniden ilan edebilme, değer değiştirilebilirliği ve hata koruması üzerindeki etkileri nedir? Her ilan etme yöntemi için tipik kullanım senaryolarına örnekler verin.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

TypeScript'te (modern JavaScript'te olduğu gibi) değişkenler let, const ve var kullanılarak ilan edilebilir ve bunlar arasında önemli farklılıklar vardır:

  • let — Blok kapsamına sahiptir, değişken yeniden tanımlanabilir (yeni bir değer atanabilir), ancak aynı kapsamda ikinci kez ilan edilemez.
  • const — Aynı şekilde blok kapsamına sahiptir, değer hemen atanmalıdır, yeniden tanımlanamaz (ancak const ile ilan edilen nesnenin iç özellikleri değiştirilebilir!).
  • var — Fonksiyonel kapsamı vardır, yukarı kaldırma (hoisting) mekanizması mümkündür, değişken yeniden ilan edilebilir ve değiştirilebilir.

Örnek:

if (true) { let a = 10; const b = 20; var c = 30; } console.log(c); // 30 — blok dışında görünür! console.log(a); // Hata: a tanımlı değil console.log(b); // Hata: b tanımlı değil

Tipik senaryolar:

  • const — değişmeyecek bir değer için (sabitler, ayarlar, fonksiyon referansları).
  • let — çalışma sırasında değişecek değerler için (sayaclar, döngü değişkenleri).
  • var — kullanılması önerilmez, yalnızca eski kod desteği için.

Zorluk Sorusu.

const bir nesneyi tamamen değiştirilemez yapabilir mi? Açıklayın, örnek verin.

Cevap: Hayır, const yalnızca referansın değiştirilmesini engeller, ancak nesnenin özelliklerinin değiştirilmesini önlemez!

const obj = { x: 1 }; obj.x = 2; // Bu geçerlidir! obj = { x: 3 }; // Hata: yeni referans ataması

Tamimmüedililik için Object.freeze kullanılır:

const frozen = Object.freeze({ x: 1 }); frozen.x = 2; // Sıkı modda hata, ancak her zaman derleyici uyarmaz!

Konu ile ilgili bilgi eksikliğinden kaynaklanan gerçek hata örnekleri.


Hikaye

Büyük bir frontend projesinin TypeScript'e geçiş sürecinde geliştiriciler, kapsamın artık blok bazında olduğunu dikkate almadan var'ı let ile topluca değiştirdiler. Bu, bazı for döngülerindeki sayaçların döngü dışındaki erişimlerin dışında kalmasına neden oldu ve beklenmeyen mantık hatalarına yol açtı: kod, döngü tamamlandıktan sonra döngü sayacına erişim girişimlerinde çalışmamaya başladı.


Hikaye

Geliştirici, özelliklerin değişmeyeceğini düşünerek bir yapılandırma nesnesi depolamak için const ile bir sabit ilan etti. Daha sonra programın başka bir yerinde bir özellik değiştirildi: bu, dış kodun "beklenmedik" bir şekilde tüm kullanıcılar için küresel ayarları değiştirmesi nedeniyle, veri işlemeyle ilgili zor tespit edilebilen hatalara yol açtı.


Hikaye

Projede aynı anda let, const ve var kullanıldı, net bir politika olmadan. Bir bileşen, bir fonksiyon çerçevesinde bir var değişkenini yeniden ilan etti, oysa başka bir yer, değişkenin let ile ilan edildiğini ve bu nedenle blok dışında görünmeyeceğini bekliyordu. Sonuç: değişkenlerin örtüşmesi, iç mantıkta hatalar ve değişkenlerin belirgin yaşam döngüsü ile ilgili karmaşık hata ayıklama sorunları.