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ışı.