Sobes.tech
Middle+

Değişmezlik ve saflık nasıl birbirine bağlıdır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Değiştirilemezlik (değiştirilemeyen nesneler) ve saflık (yan etki olmayan fonksiyonlar) yakından ilişkilidir, çünkü değiştirilemezlik saflığı elde etmeye yardımcı olur.

Saf fonksiyon:

  • Aynı giriş verileri için her zaman aynı sonucu döner.
  • Kapsamı dışında durumu değiştirmez (yan etki yapmaz).

Bir fonksiyon, değiştirilebilir nesneleri argüman olarak alıp onları değiştiriyorsa, bu fonksiyon saf değildir, çünkü çağrısı fonksiyon dışında sistem durumunu değiştirebilir.

Değiştirilemez nesneler kullanarak:

  • Fonksiyon, kendisine geçirilen nesneleri değiştiremez, çünkü bunlar değiştirilemezdir.
  • Her "değişiklik", mevcut nesnenin değiştirilmesi yerine yeni bir nesne oluşturur.
  • Bu, geçirilen argümanların değiştirilmesiyle ilgili yan etkilerin olmamasını sağlar.

Örnek:

<?php

// Değiştirilebilir nesne
class MutablePoint {
    public $x;
    public $y;

    public function __construct($x, $y) {
        $this->x = $x;
        $this->y = $y;
    }
}

// Saf olmayan fonksiyon (geçirilen nesneyi değiştirir)
function moveMutablePoint(MutablePoint $point, $dx, $dy) {
    $point->x += $dx;
    $point->y += $dy;
}

$mutablePoint = new MutablePoint(0, 0);
moveMutablePoint($mutablePoint, 1, 1);
// $mutablePoint artık (1, 1) - durum fonksiyon dışında değişti

// Değiştirilemez nesne
final class ImmutablePoint {
    private $x;
    private $y;

    public function __construct($x, $y) {
        $this->x = $x;
        $this->y = $y;
    }

    public function getX(): int {
        return $this->x;
    }

    public function getY(): int {
        return $this->y;
    }

    // Metot YENİ bir nesne döner, mevcut nesneyi değiştirmez
    public function move($dx, $dy): self {
        return new self($this->x + $dx, $this->y + $dy);
    }
}

// Saf fonksiyon (değiştirilemez nesnelerle çalışır)
function moveImmutablePoint(ImmutablePoint $point, $dx, $dy): ImmutablePoint {
    return $point->move($dx, $dy);
}

$immutablePoint = new ImmutablePoint(0, 0);
$newImmutablePoint = moveImmutablePoint($immutablePoint, 1, 1);
// $immutablePoint değişmedi (0, 0) - durum fonksiyon dışında değişmedi
// $newImmutablePoint artık (1, 1) - yeni bir nesne oluşturuldu

Bu şekilde, değiştirilemez nesnelerin kullanımı saf fonksiyonlar oluşturmanın yollarından biridir ve bu, daha öngörülebilir, test edilebilir ve kolay bakım yapılabilir kod sağlar.