Sobes.tech
Middle

Fonksiyonel programlama ve ilkeleri hakkında konuş.

sobes.tech yapay zeka

AI'dan gelen yanıt

Fonksiyonel programlama (FP), hesaplamaları matematiksel fonksiyonların değerlendirilmesi olarak gören ve durum değişiklikleri ile değiştirilebilir verilerden kaçınan bir programlama paradigmasıdır.

Temel ilkeler:

  • Saf fonksiyonlar: Bir fonksiyon saf sayılırsa:

    • Aynı argümanlar verildiğinde her zaman aynı sonucu döner.
    • Yan etkisi yoktur (küresel durumu değiştirmez, giriş/çıkış yapmaz, vb.).
    <?php
    // Saf fonksiyon
    function add(int $a, int $b): int {
        return $a + $b;
    }
    
    // Saf olmayan fonksiyon (yan etki - küresel değişkeni değiştirir)
    $count = 0;
    function increment_and_get(): int {
        global $count;
        $count++;
        return $count;
    }
    
  • Verilerin değiştirilemezliği: Oluşturulduktan sonra veriler değiştirilemez. Var olan nesne üzerinde değişiklik yapmak yerine, gerekli değişikliklerle yeni bir nesne oluşturulur.

    <?php
    // Değiştirilmezlik örneği (PHP'de bu dilin katı bir ilkesi değildir, ancak uygulanabilir)
    class ImmutablePoint {
        private int $x;
        private int $y;
    
        public function __construct(int $x, int $y) {
            $this->x = $x;
            $this->y = $y;
        }
    
        public function getX(): int {
            return $this->x;
        }
    
        public function getY(): int {
            return $this->y;
        }
    
        // Değiştirmek yerine yeni nesne döner
        public function move(int $dx, int $dy): self {
            return new self($this->x + $dx, $this->y + $dy);
        }
    }
    
    $p1 = new ImmutablePoint(1, 2);
    $p2 = $p1->move(1, 1); // $p1 (1, 2) kalır, $p2 (2, 3) olur
    
  • Birinci sınıf nesneler olarak fonksiyonlar: Fonksiyonlar, diğer fonksiyonlara argüman olarak geçirilebilir, fonksiyonlardan döndürülebilir, değişkenlere atanabilir.

    <?php
    // Fonksiyonlar değişkenler olarak
    $greeter = function(string $name): string {
        return "Hello, " . $name;
    };
    
    echo $greeter("World"); // Çıktı: Hello, World
    
    // Fonksiyonlar argüman olarak
    function apply_transform(array $data, callable $transform): array {
        $result = [];
        foreach ($data as $item) {
            $result[] = $transform($item);
        }
        return $result;
    }
    
    $numbers = [1, 2, 3];
    $doubled_numbers = apply_transform($numbers, function(int $n): int {
        return $n * 2;
    }); // $doubled_numbers = [2, 4, 6]
    
  • Yan etkilerin yokluğu: Hesaplamalar, dışındaki program durumu üzerinde etkili değildir.

  • Deklaratiflik: ne hesaplanması gerektiğine odaklanır, nasıl değil.

Avantajlar:

  • Test edilebilirliğin artması (saf fonksiyonlar test edilmesi kolaydır).
  • Paralellikte basitleştirme (değiştirilebilir durumun olmaması, senkronizasyon sorunlarını azaltır).
  • Daha iyi hata ayıklama.
  • Daha öngörülebilir kod davranışı.