Sobes.tech
Middle

Funksional proqramlaşdırma və onun prinsipləri haqqında danış.

sobes.tech Süni İntellekt

AI-dan cavab

Funksional proqramlaşdırma (FP) hesablama kimi riyazi funksiyaların qiymətləndirilməsi kimi nəzərdən keçirilən və vəziyyət dəyişikliklərindən və dəyişkən məlumatlardan qaçınan proqramlaşdırma paradigmasıdır.

Əsas prinsiplər:

  • Təmiz funksiyalar: Funksiya təmiz sayılırsa, əgər:

    • Eyni arqumentlər üçün həmişə eyni nəticəni verir.
    • Yan təsirlərə malik deyil (qlobal vəziyyəti dəyişmir, giriş/çıxış etmir və s.).
    <?php
    // Təmiz funksiya
    function add(int $a, int $b): int {
        return $a + $b;
    }
    
    // Təmirsiz funksiya (yan təsir - qlobal dəyişəni dəyişir)
    $count = 0;
    function increment_and_get(): int {
        global $count;
        $count++;
        return $count;
    }
    
  • Məlumatların dəyişməzliyi: Yaradıldıqdan sonra məlumatlar dəyişdirilə bilməz. Mövcud obyekt dəyişdirilmək əvəzinə, lazım olan dəyişikliklərlə yeni obyekt yaradılır.

    <?php
    // Dəyişməzlik nümunəsi (PHP-də bu dilin sərt prinsipi deyil, amma həyata keçirilə bilər)
    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;
        }
    
        // Dəyişdirmək əvəzinə, yeni obyekt qaytarır
        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) qalır, $p2 (2, 3) olur
    
  • Birinci dərəcəli obyekt kimi funksiyalar: Funksiyalar digər funksiyalara arqument kimi verilə bilər, funksiyalardan geri qaytarıla bilər, dəyişənlərə təyin oluna bilər.

    <?php
    // Funksiyalar dəyişən kimi
    $greeter = function(string $name): string {
        return "Hello, " . $name;
    };
    
    echo $greeter("World"); // Çıxış: Hello, World
    
    // Funksiyalar arqument kimi
    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 təsirlərin olmaması: Hesablama proqramın vəziyyətinə təsir etmir.

  • Deklarativlik: hesablamaq lazım olduğunu vurğulayır, * necə * deyil.

Üstünlüklər:

  • Daha yaxşı test ediləbilərlik (təmiz funksiyalar asanlıqla test edilə bilər).
  • Paralelləşdirmənin sadələşdirilməsi (dəyişməz vəziyyət problemlərini azaldır).
  • Daha yaxşı ayıklama.
  • Daha proqnozlaşdırıla bilən kod davranışı.