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: nə 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ışı.