Tüm blog yazıları

JavaScript'te const ile Tanımlanan Diziler Neden Değiştirilebilir?

JavaScript öğrenen pek çok kişi, const kelimesini gördüğünde bu değişkenin tamamen sabit olduğunu, yani bir daha asla değiştirilemeyeceğini düşünür. Bu düşünce, ilk etapta doğrudur ama yalnızca basit değerler (sayılar, metinler gibi) için geçerlidir. Konu dizilere (ve ne

eminbasbayan3 dk okuma
JavaScript'te const ile Tanımlanan Diziler Neden Değiştirilebilir?

JavaScript öğrenen pek çok kişi, const kelimesini gördüğünde bu değişkenin tamamen sabit olduğunu, yani bir daha asla değiştirilemeyeceğini düşünür. Bu düşünce, ilk etapta doğrudur ama yalnızca basit değerler (sayılar, metinler gibi) için geçerlidir. Konu dizilere (ve nesnelere) geldiğinde durum biraz daha farklıdır. Bu makalede, const ile tanımlanan dizilerin neden değiştirilebildiğini detaylı bir şekilde açıklayacağız. Konuya özellikle yeni başlayan öğrencilerin anlayabileceği şekilde yaklaşacağız.

const ile Tanımlanan Değişkenler Değiştirilemez mi?

Öncelikle temel bilgiyle başlayalım. Aşağıdaki örneği inceleyelim:

metin
const okulAdi = "Atatürk Lisesi";
okulAdi = "Cumhuriyet Lisesi"; // HATA!

Bu örnekte const ile tanımlanan okulAdi adlı değişkene daha sonra başka bir değer atamak (reassignment) mümkün değildir. JavaScript bu durumda bir hata verir çünkü const, tanımlanan değişkenin değerinin yeniden atanmasını engeller.

Peki Ya Diziler?

Şimdi konuyu dizilere taşıyalım:

metin
const ogrenciler = ["Ayşe", "Mehmet", "Ali"];

Buraya kadar her şey normal görünüyor. Ama şimdi bu dizinin içeriğini değiştirmeye çalışalım:

metin
ogrenciler.push("Zeynep");
ogrenciler[1] = "Mustafa";

Bu iki işlem de hata vermez. Yani const ile tanımladığımız halde dizinin içine yeni eleman ekleyebiliyoruz veya mevcut elemanları değiştirebiliyoruz. Bu nasıl mümkün oluyor?

Dizilerde Asıl Korunan Şey: Referans

Cevap, dizilerin JavaScript’te nasıl çalıştığıyla ilgili. Basit veri tiplerinde (sayı, metin, boolean gibi) değişkenin tuttuğu değer, doğrudan o değişkende saklanır. Ama diziler gibi karmaşık veri yapılarında durum farklıdır: Değişkenin tuttuğu şey, dizinin kendisi değil, dizinin bellekteki yeri (adres ya da referans) olur.

metin
const kitaplar = ["1984", "Hayvan Çiftliği"];

Bu örnekte kitaplar, aslında dizinin bellekteki adresini saklar. Biz bu adresi değiştirmediğimiz sürece, dizinin içeriğini değiştirmekte özgürüz. Yani const burada referansı sabitler, içeriği değil.

Referansı Değiştirmeye Çalışırsak Ne Olur?

Şimdi aynı diziye tamamen başka bir dizi atamaya çalışalım:

metin
kitaplar = ["Kuyucaklı Yusuf", "Tutunamayanlar"]; // HATA!

İşte burada hata alırız. Çünkü artık bellekteki başka bir diziye yeni bir referans atamaya çalışıyoruz. Bu da const kurallarına aykırı. JavaScript bunu engeller.

Neden Böyle Bir Şeye İzin Veriliyor?

Bu yapı, uygulamalarda veri güvenliğini sağlar. Örneğin bir mesajlaşma uygulaması yaptığınızı düşünün. Elinizde kullanıcıların yazdığı mesajları tutan bir dizi olsun:

metin
const mesajlar = [];

Kullanıcı mesaj attıkça bu diziye yeni elemanlar ekleyeceksiniz. Ama bu dizinin kendisinin tamamen değişmesini istemezsiniz. Yani dizinin içerikleri değişebilir ama mesaj listesi referans olarak aynı kalmalıdır. Böylece uygulamanız daha kararlı ve öngörülebilir olur.

Gerçek Hayattan Bir Benzetme

Bir kutu düşünün. Kutunun içinde kitaplar var. Kutuyu const ile tanımladığınızda, bu kutunun kendisi sabitlenmiş olur. Ama kutunun içindeki kitapları değiştirmek, yenilerini eklemek veya çıkarmak serbesttir. Kutuyu tamamen alıp başka bir kutuyla değiştirmeye çalıştığınızda ise sistem buna izin vermez.

metin
const kutu = ["Fizik", "Kimya"];
kutu.push("Biyoloji");    // Sorun yok
kutu[0] = "Matematik";     // Sorun yok
kutu = ["Edebiyat", "Tarih"]; // HATA!

Özetle

  • const ile tanımlanan dizinin kendisi (yani referansı) değiştirilemez.
  • Ama dizinin içeriği (elemanları) rahatlıkla değiştirilebilir.
  • Bu, JavaScript’te karmaşık veri yapılarının kontrolünü kolaylaştırır.
  • Kodun güvenliğini artırır ve programın beklenmedik şekilde bozulmasını önler.

Yeni başlayan biri olarak bu farkı anlaman çok önemli. Çünkü JavaScript’te dizilerle çalışırken neden bazı işlemlerin çalıştığını, bazılarının ise hata verdiğini anlamak ancak bu “referans” mantığını kavramakla mümkün olur.

Unutma: const ile tanımlanan bir dizi, içi değiştirilebilen ama kabuğu sabit kalan bir kaptır. Bu kaptan istediğin kadar malzeme çıkarıp koyabilirsin ama kabın kendisini atıp yerine başka bir kap koyamazsın.

JavaScript Classes ile pratik uygulamalar, metotlar arası iletişim ve gerçek dünya kod örnekleri
JavaScript Dersleri9 dk okuma

JavaScript Classes - Pratik Uygulamalar

JavaScript class'ları ile pratik uygulamalara geçin! Metotlar arası iletişimden constructor'da metot çağırmaya, kod tekrarını azaltmaktan gerçek dünya senaryolarına kadar class kullanımının inceliklerini keşfedin. Kendi alışveriş sepeti örneğinizle bilginizi pekiştirin.

Yazıyı oku
JavaScript class yapısını gösteren bir kod örneği, ES6 ile modern nesne oluşturma
JavaScript Dersleri9 dk okuma

JavaScript Classes

ES6 ile JavaScript'e gelen class yapısı sayesinde nesne oluşturmak artık çok daha kolay ve düzenli! Constructor function karmaşasından kurtulup, okunabilir ve yönetilebilir kodlar yazmak isteyenler için modern JavaScript'in temel taşı olan class'ları tüm detaylarıyla keşfedin. Bu rehberle nesne şabl

Yazıyı oku
JavaScript kodunda Constructor Function ve new keyword'ü ile nesne oluşturma örnekleri
JavaScript Dersleri8 dk okuma

Constructor Functions ve new Keyword

Factory Function'ların hafıza israfı sorununa Constructor Function'lar ve new keyword'ü ile son verin! Metotları paylaştırarak JavaScript objelerini daha verimli nasıl oluşturacağınızı, new'in perde arkasında neler yaptığını ve prototype sisteminin gücünü bu rehberde keşfedin.

Yazıyı oku

Çerez tercihlerin

Platformun çalışması için zorunlu çerezler kullanıyoruz. İzin verirsen anonim kullanım verilerini ölçüyoruz. Ayrıntıları incele