Sobes.tech
Middle

Μίλησε για τον λειτουργικό προγραμματισμό και τις αρχές του.

sobes.tech AI

Απάντηση από AI

Ο λειτουργικός προγραμματισμός (FP) είναι ένα παράδειγμα προγραμματισμού που θεωρεί τους υπολογισμούς ως αξιολόγηση μαθηματικών συναρτήσεων, αποφεύγοντας την αλλαγή κατάστασης και τα μεταβλητά δεδομένα.

Βασικές αρχές:

  • Καθαρές συναρτήσεις: Μια συνάρτηση θεωρείται καθαρή αν:

    • Πάντα επιστρέφει το ίδιο αποτέλεσμα για τα ίδια επιχειρήματα.
    • Δεν έχει παρενέργειες (δεν αλλάζει την παγκόσμια κατάσταση, δεν πραγματοποιεί εισόδους/εξόδους κ.λπ.).
    <?php
    // Καθαρή συνάρτηση
    function add(int $a, int $b): int {
        return $a + $b;
    }
    
    // Μη καθαρή συνάρτηση (έχει παρενέργεια - αλλάζει μια παγκόσμια μεταβλητή)
    $count = 0;
    function increment_and_get(): int {
        global $count;
        $count++;
        return $count;
    }
    
  • Αμετάβλητα δεδομένα: Αφού δημιουργηθούν, τα δεδομένα δεν μπορούν να αλλάξουν. Αντί να αλλάξει ένα υπάρχον αντικείμενο, δημιουργείται ένα νέο με τις απαραίτητες αλλαγές.

    <?php
    // Παράδειγμα αμεταβλητότητας (σε PHP δεν είναι αυστηρή αρχή της γλώσσας, αλλά μπορεί να υλοποιηθεί)
    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;
        }
    
        // Αντί να αλλάξει, επιστρέφει ένα νέο αντικείμενο
        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), $p2 γίνεται (2, 3)
    
  • Συναρτήσεις ως αντικείμενα πρώτης τάξης: Οι συναρτήσεις μπορούν να μεταβιβαστούν ως επιχειρήματα σε άλλες συναρτήσεις, να επιστραφούν από συναρτήσεις, να ανατεθούν σε μεταβλητές.

    <?php
    // Συναρτήσεις ως μεταβλητές
    $greeter = function(string $name): string {
        return "Hello, " . $name;
    };
    
    echo $greeter("World"); // Έξοδος: Hello, World
    
    // Συναρτήσεις ως επιχειρήματα
    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]
    
  • Έλλειψη παρενεργειών: Οι υπολογισμοί δεν επηρεάζουν την κατάσταση του προγράμματος εκτός του πεδίου τους.

  • Δηλωτική: Εστιάζει στο τι πρέπει να υπολογιστεί, όχι στο πώς.

Πλεονεκτήματα:

  • Βελτιωμένη δοκιμαστικότητα (οι καθαρές συναρτήσεις είναι εύκολες στον έλεγχο).
  • Απλοποίηση του παραλληλισμού (η έλλειψη μεταβλητής κατάστασης μειώνει τα προβλήματα συγχρονισμού).
  • Καλύτερος αποσφαλμάτωση.
  • Πιο προβλέψιμη συμπεριφορά κώδικα.