JavaScript’te “getter” ve “setter” Metotları Kullanımı

Bu yazımızda, JavaScript’te bir nesnenin özelliklerine erişmek ve değiştirmek için kullanılan “getter” ve “setter” metotları hakkında bilgiler vereceğiz.

JavaScript’te “getter” ve “setter” Metotları

“getter” ve “setter” metotları, 2009 yılında yapılan ECMAScript 5 (ES5) sürümünde JavaScript’e eklenmiştir. Özellikle Java ve C# gibi programlama diillerine hakimseniz bu özelliklerin sahip olduğu çalışma mantığına aşina olabilirsiniz.

Yalnız belirtmek isterim ki, bu özellikller aslında dile yeni bir işlevsellik eklemezler. Bilakis daha okunabilir veya ifade edilebilir kod yazmamıza olanak tanıyan “syntactic sugar” (sözdizimsel şekerleme) olarak adlandırılan bir özelliktir.

Bu metotlar, genellikle sınıfın dışından değiştirilebilecek verinin miktarını sınırlamak ve böylece programın daha tahmin edilebilir olması için dile kazandırılmıştır.

Ayrıca belirtmek isterim ki, JavaScript’te bir nesnenin “getter” metodunu çağırırken ya da “setter” metodunu kullanırken parantez kullanmazsınız. “Getter” ve “setter” metotları normal metotlar gibi değildir; onlar bir özellik gibi davranır.

“getter” Metodu

Bir özelliğin değerini döndürmesi için kullandığımız metottur. “get” anahtar kelimesi ve bir fonksiyonun birleşiminden oluşur. Nesnenin belirli bir özelliğine erişildiğinde otomatik olarak çağrılır. Yani bir nesne özelliği için bir “getter” tanımlamak için, özelliğin adını ve bir fonksiyonu “get” anahtar kelimesi ile birlikte kullanmamız gerekir:

Yukarıdaki örneğimizde, circle.area ile circle.circumference() arasındaki farkı görmüşsünüzdür diye düşünüyorum. “Getter” metodu olan area parantez kullanmadan çağrılırken, normal bir fonksiyon olan circumference ise parantez ile çağrılmıştır.

“Peki, niye böyle bir şey kullanıyoruz?” diye sorabilirsiniz. JavaScript’teki “getter” metodu, bir nesne özelliğinin değerini “get” (alan) eden, yani döndürmek için kullanılan bir metoddur ve bir nesne özelliğine erişirken (yani değerini okurken) otomatik olarak tetiklenir. Örneğin:

Bu örnekte, area hesaplamalı bir özelliktir. Yani, width ve height özelliklerinin değerlerine dayanarak hesaplanır. Her ne kadar doğrudan bir değeri saklamasa da, getter metodu sayesinde bir özellik gibi erişilebilir hale gelmiştir.

Bunu şöyle düşünebilirsiniz: “Getter”, bir özellik gibi davranan bir fonksiyondur. Ancak, bu “özellik”, gerçekte nesnenin durumunda saklanan değil, getter’in çalıştığı zaman hesaplanan bir değeri temsil eder.

Özetle, get metodu bir anlamda bir fonksiyonun return ifadesine benzer, ancak bir nesne özelliğine doğrudan erişimle otomatik olarak çalışır.

“setter” Metodu

Bir özelliğin değerini değiştirmek için kullanılan bir metoddur. “set” anahtar kelimesi ve bir fonksiyonun birleşiminden oluşur. Belirli bir nesne özelliğine değer atandığında otomatik olarak çağrılır.

İlk örneğimizi içinde “setter” metodu olacak şekilde güncelleyelim:

Bu örnekte, radius adında bir setter metodu ekledik. Bu setter, radius özelliğine bir değer atanmaya çalışıldığında otomatik olarak çalışır. Özellikle, eğer atanmaya çalışılan değer 0’dan küçük veya eşitse, bir hata mesajı gösterir ve yarıçapı değiştirmez. Bu da demektir ki, bir nesne özelliğine değer atanırken ek kontroller veya işlevsellik eklememize olanak tanımaktadır.

Bu şekilde, “getter” ve “setter” metotları, bir nesnenin özelliklerine erişim ve değişiklik yapmanın kontrollü bir yolunu sağlar. Bu özellikler genellikle birlikte kullanılır ve bir nesnenin özelliklerini korumak, doğrulamak ve özelleştirmek için etkili bir yol sunar.

Bir bakıma set metodu, bir değişkenin değerini ayarladığınızda kullandığınız atama operatörüne (=) benzer. Ancak setter metotları, bir değişkenin değerini doğrudan ayarlamak yerine, bir özellik üzerinde daha fazla kontrol sağlamak için kullanılır.

JavaScript’te “getter” ve “setter” Kullanma Nedenleri

Underscore (_) karakteri, genellikle bir özelliğin veya değişkenin “private” (yani sadece belirli bir kapsam veya sınıf içinden erişilebilir) olduğunu belirtmek için kullanılır. JavaScript, varsayılan olarak gerçek private özellikleri desteklemez (yani, belirli bir kapsam veya sınıf dışından erişilemez), bu yüzden geliştiriciler genellikle bu tür bir değişkenin doğrudan erişimini ve değiştirilmesini sınırlamak için _ ön eki kullanırlar.

Bu durumda, getter ve setter metotları, bu “private” özelliklere erişmek için güvenli bir yol sağlar. Bu metotlar, bir nesnenin özelliklerini kontrol etmek ve yönetmek için kullanılır. Aşağıda bunların genel kullanım amaçlarından bazıları bulunmaktadır:

  1. Veri Doğrulama: Setter metotları, bir özelliğe atanacak değerleri doğrulamak ve filtrelemek için kullanılabilir. Örneğin, bir nesnenin age özelliğini ayarlamak için bir setter oluşturabilir ve yalnızca geçerli bir yaşın atanmasını sağlayabilirsiniz.
  2. Veriye Kontrollü Erişim: Getter ve setter metotları, bir nesnenin özelliklerine kontrollü erişim sağlar. Bu, bir özelliğin doğrudan değiştirilmesini önlemeye ve özelliği okumadan önce ek işlemler yapmaya yardımcı olur.
  3. Veri Gizleme ve Özelleştirme: Getter ve setter metotları, bir özelliğin iç uygulama detaylarını gizlemek ve bir nesnenin dış arayüzünü özelleştirmek için kullanılabilir. Bu, uygulamanın farklı bölümlerini birbirinden izole eder ve kodun daha güvenli ve bakımı daha kolay hale gelir.
  4. Bilgi Saklama ve Daha Fazla Fonksiyonalite: Getter ve setter metotları, bilgi saklama (encapsulation) prensibini uygulamanın bir yoludur. Bu, bir nesnenin durumunu ve davranışını bir arada tutarak kodun daha düzenli ve anlaşılır olmasını sağlar. Ayrıca, bir özelliğe erişim veya değiştirme işlemi sırasında ek işlevler çalıştırmak için kullanılabilirler.

❗ Getter ve setter metotlarını kullanırken akılda tutulması gereken başka bir şey, özelliklerin “getter” ve “setter” metotlarıyla aynı adı paylaşamayacağıdır. Aksi takdirde, bu durum bir sonsuz döngüye (infinite loop) veya sonsuz çağrı yığınına (call stack error) neden olabilir. Örneğin:

Bu durumda firstName özelliği ve firstName getter metodu aynı isme sahip. Bu nedenle, person.firstName ifadesini çağırdığınızda, getter metodu this.firstName ifadesini çağırır. Ancak this.firstName, aslında getter metodunu temsil ettiği için, getter metodu kendini tekrar çağırır. Bu, bir sonsuz döngüye neden olur.

Bu tür bir durumun önüne geçmek için, genellikle bir _ (alt çizgi) karakteri ekleyerek getter ve setter metotlarından farklı bir isimle özelliği adlandırabiliriz.

Aşağıdaki örneğimizde bir Person nesnesi oluşturacağız ve firstName, lastName ve age özellikleri için getter ve setter metotları kullanacağız. Ayrıca veri doğrulama ve ek işlevlerin nasıl çalıştığını da göstereceğiz:

Yukarıdak örnekte, firstName, lastName ve age için getter ve setter metotları belirledik. fullName özelliği için ek bir getter ve setter metodu ekledik. fullName setter’ı, fullName özelliğine bir değer atandığında firstName ve lastName özelliklerini de ayarlar.

“Setter” metotları ayrıca veri doğrulama gerçekleştirir. Yani, firstName ve lastName‘in geçerli bir string olduğunu, age‘in ise 0 ile 120 arasında bir sayı olduğunu kontrol ederler. Geçerli olmayan bir değer ayarlamaya çalıştığınızda bir hata mesajı gösterirler.

İlgili Makaleler

Bir yanıt yazın

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

Başa dön tuşu