Menu
Coddy logo textTech

Doğrulama ve Yan Etkiler

Coddy'nin JavaScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 45 / 56.

Getter'lar ve setter'lar, özellik okumaktan ve yazmaktan daha fazlasını yapabilirler; girdileri doğrulayabilir ve değerler değiştiğinde yan etkileri tetikleyebilirler.

Doğrulamalı bir User sınıfı oluşturalım:

class User {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }
  
  get age() {
    return this._age;
  }
  
  set age(value) {
    // Yaşın bir sayı olduğunu ve makul bir aralıkta olduğunu doğrula
    if (typeof value !== 'number') {
      throw new Error('Age must be a number');
    }
    
    if (value < 0 || value > 120) {
      throw new Error('Age must be between 0 and 120');
    }
    
    this._age = value;
    
    // Yan etki: yaş değiştiğinde günlüğe kaydet
    console.log(`Age updated to ${value}`);
  }
}

Artık setter'ı kullandığımızda, doğrulama otomatik olarak gerçekleşir:

const user = new User('Alice', 25);

// Bu çalışır
user.age = 30;  // Log: "Age updated to 30"

// Bu bir hata fırlatır
user.age = -5;  // Hata: Age must be between 0 and 120

// Bu da bir hata fırlatır
user.age = "thirty";  // Hata: Age must be a number

Doğrulama (Validation) = Bir değeri saklamadan önce geçerli olup olmadığını kontrol etmek
Yan Etkiler (Side Effects) = Bir özellik değiştiğinde gerçekleşen ek eylemler

challenge icon

Görev

Size temel bir ayarlayıcıya (setter) sahip bir BankAccount sınıfı verilmiştir. Göreviniz balance ayarlayıcısını tamamlamaktır.

Ayarlayıcıya şunları ekleyin:

  1. Doğrulama: value bir sayı değilse VEYA 0'dan küçükse kontrol edin - eğer öyleyse, console.log("Invalid balance") yapın ve ayarlayıcıdan çıkmak için return kullanın
  2. Yan Etki: Geçerli bir değeri sakladıktan sonra, console.log(\`Balance updated to ${value}\`) yapın

Kopya kağıdı

Getter ve setter metotları, girdileri doğrulayabilir ve değerler değiştiğinde yan etkileri tetikleyebilir.

Doğrulama, bir değerin saklanmadan önce geçerli olup olmadığını kontrol eder:

set age(value) {
  if (typeof value !== 'number') {
    throw new Error('Age must be a number');
  }
  
  if (value < 0 || value > 120) {
    throw new Error('Age must be between 0 and 120');
  }
  
  this._age = value;
}

Yan Etkiler, bir özellik değiştiğinde gerçekleşen ek eylemlerdir:

set age(value) {
  // validation...
  this._age = value;
  
  // Side effect: log when age changes
  console.log(`Age updated to ${value}`);
}

Örnek kullanım:

const user = new User('Alice', 25);
user.age = 30;  // Logs: "Age updated to 30"
user.age = -5;  // Error: Age must be between 0 and 120

Kendin dene

import { BankAccount } from './account.js';

// Test senaryoları
const account = new BankAccount("Savings");

// Test 1: Geçerli bakiye
account.balance = 100;
console.log(account.balance);

// Test 2: Geçersiz bakiye (negatif)
account.balance = -50;
console.log(account.balance);

// Test 3: Geçersiz bakiye (sayı değil)
account.balance = "abc";
console.log(account.balance);

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler