JavaScript Obje ve Sınıf İçinde Getter ve Setter Kullanımı

Hamdi Yılmaz
5 min readMar 20, 2023

JavaScript, nesne yönelimli bir programlama dilidir ve sınıflar, objeler, özellikler ve yöntemler gibi birçok nesneye sahiptir. Bu özellikler, kodunuzu daha modüler hale getirmenizi ve daha düzenli bir yapı oluşturmanızı sağlar. Bununla birlikte, bazen özelliklere doğrudan erişmek yerine, özellikleri kontrol etmek isteyebilirsiniz. Bu durumda, getter ve setter’lar kullanışlı bir araçtır.

Getter ve Setter Nedir?

Getter ve setter, objelerde ve sınıflarda özelliklere erişim yöntemleridir. Getter, bir özelliğin değerini getirirken, setter, bir özelliğin değerini ayarlar.

Getter ve setter’ların kullanımı, özellikle bir özelliğin okunmasını veya yazılmasını kontrol etmek istediğinizde faydalıdır. Örneğin, bir özelliğin sadece belirli bir aralıkta olmasına izin vermek isteyebilirsiniz. Bu durumda, setter kullanarak, özelliğin değerinin belirtilen aralıkta olup olmadığını kontrol edebilirsiniz.

Objelerde Getter ve Setter Kullanımı

Getter ve setter’ları objelerde kullanmak oldukça basittir. Bir objeye, getter veya setter tanımlamak için, nesne yöntemleri olan Object.defineProperty() veya Object.defineProperties() yöntemlerinden birini kullanabilirsiniz.

let person = {
firstName: "John",
lastName: "Doe",
get fullName() {
return `${this.firstName} ${this.lastName}`;
},
set fullName(value) {
let parts = value.split(" ");
this.firstName = parts[0];
this.lastName = parts[1];
}
};

console.log(person.fullName); // Output: John Doe

person.fullName = "Jane Smith";
console.log(person.firstName); // Output: Jane
console.log(person.lastName); // Output: Smith

Bu örnekte, person adında bir obje tanımlanmıştır. Bu objenin firstName ve lastName adında iki özelliği vardır. Ayrıca, objenin fullName getter ve setter yöntemleri de vardır.

fullName getter yöntemi, firstName ve lastName özelliklerinin birleşimi olan bir tam ad döndürür. fullName setter yöntemi, verilen bir tam adı firstName ve lastName özelliklerine ayırır.

Son olarak, fullName getter yöntemi, console.log() yöntemiyle çağrılır ve “John Doe” çıktısı verir. Daha sonra, fullName setter yöntemi, “Jane Smith” değeriyle çağrılır ve firstName ve lastName özellikleri güncellenir. console.log() yöntemi, firstName ve lastName özellikleri üzerinde çağrılarak, özelliklerin güncellenip güncellenmediği kontrol edilir.

Sınıflarda Getter ve Setter Kullanımı

Getter ve setter’ları sınıflarda da kullanabilirsiniz. Sınıflarda, özellikleri getter ve setter yöntemleriyle tanımlayarak, nesne yönelimli programlamanın getirdiği avantajlardan yararlanabilirsiniz.

Aşağıdaki örnek, Person sınıfını kullanarak bir obje oluşturur ve objenin tam adını kontrol eder.

class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

get fullName() {
return `${this.firstName} ${this.lastName}`;
}

set fullName(value) {
let parts = value.split(" ");
this.firstName = parts[0];
this.lastName = parts[1];
}
}

let person = new Person("John", "Doe");
console.log(person.fullName); // Output: John Doe

person.fullName = "Jane Smith";
console.log(person.firstName); // Output: Jane
console.log(person.lastName); // Output: Smith

Bu örnekte, Person adında bir sınıf tanımlanmıştır. Bu sınıfın constructor yöntemi, firstName ve lastName özelliklerini alır. Ayrıca, sınıfın fullName getter ve setter yöntemleri de vardır.

fullName getter yöntemi, firstName ve lastName özelliklerinin birleşimi olan bir tam ad döndürür. fullName setter yöntemi, verilen bir tam adı firstName ve lastName özelliklerine ayırır.

Son olarak, fullName getter yöntemi, console.log() yöntemiyle çağrılır ve “John Doe” çıktısı verir. Daha sonra, fullName setter yöntemi, “Jane Smith” değeriyle çağrılır ve firstName ve lastName özellikleri güncellenir. console.log() yöntemi, firstName ve lastName özellikleri üzerinde çağrılarak, özelliklerin güncellenip güncellenmediği kontrol edilir.

Getter ve setter’lar, özellikleri kontrol etmenin yanı sıra, özellik değerlerini geri döndürmek için de kullanılabilir. Örneğin, bir özellikten türetilen bir değer hesaplama gerekiyorsa, getter kullanarak bu değeri döndürebilirsiniz. Aynı şekilde, özelliğe atanan değeri işlemek gerekiyorsa, setter kullanarak bu değeri kontrol edebilirsiniz.

Getter ve setter’ların kullanımı, kodunuzu daha esnek hale getirerek, özelliklerinize daha fazla kontrol sağlar. Bu özellikleri kullanarak, objeler ve sınıflar arasında veri tutarlılığını sağlamak daha kolay hale gelir.

Getter ve setter’lar, sınıflarda ve objelerde birçok farklı amaç için kullanılabilir. Aşağıda, bu amaçların bazıları ve bunları nasıl kullanabileceğinizle ilgili örnekler yer almaktadır:

1. Özellik Değerlerini Kontrol Etmek

Getter ve setter’lar, özellik değerlerini kontrol etmek için sıkça kullanılır. Örneğin, bir sınıfta yer alan bir özelliğe, belirli bir aralıkta bir değer atanmasını istiyorsanız, bu özelliği bir setter ile kontrol edebilirsiniz.

class Person {
constructor(age) {
this._age = age;
}

get age() {
return this._age;
}

set age(value) {
if (value < 0 || value > 120) {
console.log("Invalid age!");
return;
}

this._age = value;
}
}

let person = new Person(25);
console.log(person.age); // Output: 25

person.age = 150; // Output: Invalid age!

Bu örnekte, Person adında bir sınıf tanımlanmıştır. Bu sınıfın constructor yöntemi, age adında bir özellik alır. Bu özellik, getter ve setter ile birlikte kullanılır.

age getter yöntemi, _age özelliğinin değerini geri döndürür. age setter yöntemi, _age özelliğinin değerini kontrol eder ve belirli bir aralıkta olmadığı durumlarda “Invalid age!” mesajı verir.

Son olarak, age getter yöntemi, console.log() yöntemiyle çağrılır ve 25 değeri döndürülür. Daha sonra, age setter yöntemi, 150 değeriyle çağrılır ve “Invalid age!” mesajı verilir.

2. Hesaplamalı Özellikler Oluşturmak

Getter ve setter’lar, hesaplamalı özellikler oluşturmak için de kullanılabilir. Hesaplamalı özellikler, birden fazla özellikten türetilen ve özellik değerlerinin değişmesi durumunda otomatik olarak güncellenen özelliklerdir.

class Rectangle {
constructor(width, height) {
this._width = width;
this._height = height;
}

get area() {
return this._width * this._height;
}

get perimeter() {
return 2 * (this._width + this._height);
}

set width(value) {
this._width = value;
}

set height(value) {
this._height = value;
}
}

let rectangle = new Rectangle(5, 10);
console.log(rectangle.area); // Output: 50

rectangle.width = 7;
console.log(rectangle.perimeter); // Output: 34

Bu örnekte, Rectangle adında bir sınıf tanımlanmıştır. Bu sınıfın constructor yöntemi, width ve height adında iki özellik alır. Bu özellikler, getter ve setter ile birlikte kullanılır.

area getter yöntemi, _width ve _height özelliklerinin çarpımını hesaplar ve sonucu döndürür. perimeter getter yöntemi, _width ve _height özelliklerinin toplamının iki katını hesaplar ve sonucu döndürür.

width setter yöntemi, _width özelliğinin değerini değiştirir. height setter yöntemi, _height özelliğinin değerini değiştirir.

Son olarak, rectangle adında bir Rectangle objesi oluşturulur. Bu objenin area getter yöntemi çağrılır ve sonuç olarak 50 döndürülür. Daha sonra, rectangle objesinin width setter yöntemi, 7 değeriyle çağrılır ve rectangle objesinin perimeter getter yöntemi çağrılır. Sonuç olarak 34 döndürülür.

3. Özellikleri Gizlemek

Getter ve setter’lar, özellikleri gizlemek için de kullanılabilir. Özellikleri gizlemek, sınıfın dışındaki kodların özellik değerlerine doğrudan erişmesini engelleyerek, sınıfın daha güvenli hale getirilmesini sağlar.

class BankAccount {
constructor(accountNumber, balance) {
this._accountNumber = accountNumber;
this._balance = balance;
}

get accountNumber() {
return this._accountNumber;
}

get balance() {
return this._balance;
}

deposit(amount) {
this._balance += amount;
}

withdraw(amount) {
if (amount > this._balance) {
console.log("Insufficient balance!");
return;
}

this._balance -= amount;
}
}

let account = new BankAccount("123456", 1000);
console.log(account.balance); // Output: 1000

account.balance = 2000; // This will not work

Bu örnekte, BankAccount adında bir sınıf tanımlanmıştır. Bu sınıfın constructor yöntemi, accountNumber ve balance adında iki özellik alır. Bu özellikler, getter yöntemiyle birlikte kullanılır.

accountNumber getter yöntemi, _accountNumber özelliğinin değerini döndürür. balance getter yöntemi, _balance özelliğinin değerini döndürür.

deposit yöntemi, hesaba belirtilen miktarda para yatırır. withdraw yöntemi, hesaptan belirtilen miktarda para çeker. Ancak, hesapta yeterli bakiye yoksa “Insufficient balance!” mesajı verir.

Son olarak, account adında bir BankAccount objesi oluşturulur ve balance getter yöntemi çağrılır. Sonuç olarak 1000 döndürülür. Daha sonra, account objesinin balance özelliğine doğrudan 2000 değeri atanmaya çalışılır. Ancak, bu işlem yapılamaz, çünkü balance getter yöntemi sadece özelliğin değerini döndürür ve özelliğe doğrudan erişimi engeller.

Bu örnekte, getter ve setter’lar, BankAccount sınıfındaki özellikleri gizlemek için kullanılmıştır. Bu, sınıfın dışındaki kodların doğrudan özelliklere erişmesini engeller ve sınıfın daha güvenli hale gelmesini sağlar.

4. Getter ve Setter’ların Uygulanması

Getter ve setter’lar, obje özellikleri ve sınıf özellikleri gibi farklı durumlarda uygulanabilir. Aşağıda, obje ve sınıf özellikleri için örnekler verilmiştir.

Objeler İçin Getter ve Setter’lar

let person = {
_name: "John",
_age: 30,
get name() {
return this._name;
},
set name(newName) {
this._name = newName;
},
get age() {
return this._age;
},
set age(newAge) {
if (newAge < 0 || newAge > 150) {
console.log("Invalid age!");
return;
}

this._age = newAge;
}
};

console.log(person.name); // Output: John
person.name = "Alice";
console.log(person.name); // Output: Alice
console.log(person.age); // Output: 30
person.age = 25;
console.log(person.age); // Output: 25
person.age = -5; // Output: Invalid age!

--

--