Τι είναι ο Λειτουργικός Προγραμματισμός;
⚡ Έξυπνη Σύνοψη
Ο Συναρτησιακός Προγραμματισμός είναι ένας τρόπος δημιουργίας λογισμικού συνθέτοντας καθαρές συναρτήσεις, αποφεύγοντας δεδομένα κοινής κατάστασης και μεταβλητά δεδομένα. Δίνει έμφαση στις εκφράσεις έναντι των εντολών, επομένως η έξοδος μιας συνάρτησης εξαρτάται μόνο από τις εισόδους της, γεγονός που καθιστά τα προγράμματα προβλέψιμα και ελέγξιμα.

Τι είναι ο Λειτουργικός Προγραμματισμός;
Ο συναρτησιακός προγραμματισμός (που ονομάζεται επίσης FP) είναι ένας τρόπος σκέψης για την κατασκευή λογισμικού μέσω της δημιουργίας καθαρών συναρτήσεων. Αποφεύγει τις έννοιες της κοινόχρηστης κατάστασης και των μεταβλητών δεδομένων που παρατηρούνται στον αντικειμενοστρεφή προγραμματισμό.
Οι συναρτησιακές γλώσσες δίνουν έμφαση στις εκφράσεις και τις δηλώσεις παρά στην εκτέλεση εντολών. Επομένως, σε αντίθεση με άλλες διαδικασίες που εξαρτώνται από μια τοπική ή καθολική κατάσταση, η έξοδος τιμών στο FP εξαρτάται μόνο από τα ορίσματα που διαβιβάζονται στη συνάρτηση.
Χαρακτηριστικά Λειτουργικού Προγραμματισμού
- Η μέθοδος λειτουργικού προγραμματισμού εστιάζει στα αποτελέσματα και όχι στη διαδικασία.
- Η έμφαση δίνεται σε αυτό που πρέπει να υπολογιστεί.
- Τα δεδομένα είναι αμετάβλητα.
- Ο συναρτησιακός προγραμματισμός αναλύει το πρόβλημα σε συναρτήσεις.
- Βασίζεται στην έννοια των μαθηματικών συναρτήσεων που χρησιμοποιούν υποθετικές εκφράσεις και αναδρομή για την εκτέλεση του υπολογισμού.
- Δεν υποστηρίζει εντολές επανάληψης όπως οι βρόχοι και εντολές υπό όρους όπως η συνάρτηση If-Else.
Ιστορία του λειτουργικού προγραμματισμού
- Η βάση του Συναρτησιακού Προγραμματισμού είναι ο Λογισμός Λάμδα. Αναπτύχθηκε τη δεκαετία του 1930 για την εφαρμογή, τον ορισμό και την αναδρομή των συναρτήσεων.
- Η LISP ήταν η πρώτη γλώσσα συναρτησιακού προγραμματισμού. Ο McCarthy τη σχεδίασε το 1960.
- Στα τέλη της δεκαετίας του '70, ερευνητές στο Πανεπιστήμιο του Εδιμβούργου όρισαν τη Μεταγλώσσα (ML - Meta Language).
- Στις αρχές της δεκαετίας του '80, η γλώσσα Hope πρόσθεσε αλγεβρικούς τύπους δεδομένων για αναδρομή και εξισωτική συλλογιστική.
- Το 2004, καινοτομήθηκε η λειτουργική γλώσσα «Scala».
Λειτουργικές Γλώσσες Προγραμματισμού
Ο στόχος οποιασδήποτε γλώσσας προγραμματισμού FP είναι να μιμείται μαθηματικές συναρτήσεις. Ωστόσο, η βασική διαδικασία υπολογισμού είναι διαφορετική στον συναρτησιακό προγραμματισμό.
Ακολουθούν μερικές από τις πιο σημαντικές γλώσσες λειτουργικού προγραμματισμού:
- Χασκέλ
- SML
- Clojure
- Scala
- Ερλάνγκ
- Καθαρός
- F#
- ML/OCaml Lisp / Scheme
- XSLT
- SQL
- Mathematica
Βασική ορολογία Λειτουργικού Προγραμματισμού και Concepts
Αμετάβλητα δεδομένα
Τα αμετάβλητα δεδομένα σημαίνουν ότι θα πρέπει να μπορείτε εύκολα να δημιουργείτε δομές δεδομένων αντί να τροποποιείτε ήδη υπάρχουσες.
Αναφορική διαφάνεια
Τα λειτουργικά προγράμματα θα πρέπει να εκτελούν λειτουργίες σαν να είναι η πρώτη φορά. Έτσι, θα γνωρίζετε τι μπορεί να συνέβη ή να μην συνέβη κατά την εκτέλεση του προγράμματος, καθώς και τις παρενέργειές του. Σε όρους FP, αυτό ονομάζεται Αναφορική διαφάνεια.
Αρθρωτότητα
Ο σχεδιασμός με αρθρωτές ενότητες αυξάνει την παραγωγικότητα. Οι μικρές ενότητες μπορούν να κωδικοποιηθούν γρήγορα και έχουν μεγαλύτερες πιθανότητες επαναχρησιμοποίησης, γεγονός που σίγουρα οδηγεί σε ταχύτερη ανάπτυξη προγραμμάτων. Εκτός από αυτό, οι ενότητες μπορούν να δοκιμαστούν ξεχωριστά, γεγονός που σας βοηθά να μειώσετε τον χρόνο που αφιερώνετε σε δοκιμές μονάδων και εντοπισμό σφαλμάτων.
Συντήρηση
Η συντηρησιμότητα είναι ένας απλός όρος που σημαίνει ότι ο προγραμματισμός FP είναι ευκολότερος στη συντήρηση, καθώς δεν χρειάζεται να ανησυχείτε για τυχόν τυχαία αλλαγή οτιδήποτε εκτός της δεδομένης συνάρτησης.
Λειτουργία πρώτης κατηγορίας
Η «συνάρτηση πρώτης κατηγορίας» είναι ένας ορισμός που αποδίδεται σε οντότητες γλώσσας προγραμματισμού που δεν έχουν περιορισμούς στη χρήση τους. Επομένως, οι συναρτήσεις πρώτης κατηγορίας μπορούν να εμφανιστούν οπουδήποτε στο πρόγραμμα.
Κλείσιμο
Ένα κλείσιμο είναι μια εσωτερική συνάρτηση που μπορεί να έχει πρόσβαση σε μεταβλητές της γονικής συνάρτησης, ακόμα και μετά την εκτέλεση της γονικής συνάρτησης.
Λειτουργίες ανώτερης τάξης
Οι συναρτήσεις υψηλότερης τάξης είτε λαμβάνουν άλλες συναρτήσεις ως ορίσματα είτε τις επιστρέφουν ως αποτελέσματα.
Οι συναρτήσεις υψηλότερης τάξης επιτρέπουν μερικές εφαρμογές ή currying. Αυτή η τεχνική εφαρμόζει μια συνάρτηση στα ορίσματά της μία κάθε φορά, με κάθε εφαρμογή να επιστρέφει μια νέα συνάρτηση που δέχεται το επόμενο όρισμα.
Καθαρή λειτουργία
Μια «καθαρή συνάρτηση» είναι μια συνάρτηση της οποίας οι είσοδοι δηλώνονται ως είσοδοι και καμία από αυτές δεν πρέπει να είναι κρυφή. Οι έξοδοι δηλώνονται και ως έξοδοι.
Οι καθαρές συναρτήσεις επιδρούν στις παραμέτρους τους. Δεν είναι αποτελεσματικές αν δεν επιστρέφουν τίποτα. Επιπλέον, προσφέρουν την ίδια έξοδο για τις δεδομένες παραμέτρους.
Παράδειγμα:
Function Pure(a,b) { return a+b; }
Μη καθαρές συναρτήσεις
Οι ακαθαρσίες συναρτήσεις είναι ακριβώς το αντίθετο των καθαρών συναρτήσεων. Έχουν κρυφές εισόδους ή εξόδους και γι' αυτό ονομάζονται ακαθαρσίες. Οι ακαθαρσίες συναρτήσεις δεν μπορούν να χρησιμοποιηθούν ή να ελεγχθούν μεμονωμένα, καθώς έχουν εξαρτήσεις.
Παράδειγμα
int z; function notPure(){ z = z+10; }
Σύνθεση συνάρτησης
Η σύνθεση συναρτήσεων συνδυάζει 2 ή περισσότερες λειτουργίες για να δημιουργήσει μια νέα.
κοινές πολιτείες
Η κοινόχρηστη κατάσταση είναι μια σημαντική έννοια στον προγραμματισμό OOP. Ουσιαστικά, πρόκειται για την προσθήκη ιδιοτήτων σε αντικείμενα. Για παράδειγμα, εάν ένας σκληρός δίσκος είναι ένα αντικείμενο, η χωρητικότητα αποθήκευσης και το μέγεθος δίσκου μπορούν να προστεθούν ως ιδιότητες.
Παρενέργειες
Οι παρενέργειες είναι οποιεσδήποτε αλλαγές κατάστασης που συμβαίνουν εκτός μιας καλούμενης συνάρτησης. Ο μεγαλύτερος στόχος οποιασδήποτε γλώσσας προγραμματισμού FP είναι η ελαχιστοποίηση των παρενεργειών διαχωρίζοντάς τες από τον υπόλοιπο κώδικα λογισμικού. Στον προγραμματισμό FP, είναι ζωτικής σημασίας να απομακρύνετε τις παρενέργειες από την υπόλοιπη λογική προγραμματισμού σας.
Τα οφέλη του λειτουργικού προγραμματισμού
- Σας επιτρέπει να αποφύγετε προβλήματα και σφάλματα στον κώδικα που προκαλούν σύγχυση.
- Ευκολότερη δοκιμή και εκτέλεση δοκιμών μονάδας και εντοπισμού σφαλμάτων στο FP Code.
- Παράλληλη επεξεργασία και ταυτόχρονη επεξεργασία.
- Ανάπτυξη θερμού κώδικα και ανοχή σφαλμάτων.
- Προσφέρει καλύτερη αρθρωσιμότητα με μικρότερο κώδικα.
- Αυξημένη παραγωγικότητα του προγραμματιστή.
- Υποστηρίζει ενσωματωμένες συναρτήσεις.
- Λειτουργικές κατασκευές όπως Lazy Map & Lists, κ.λπ.
- Επιτρέπει την αποτελεσματική χρήση του Λογισμού Λάμδα.
Περιορισμοί Λειτουργικού Προγραμματισμού
- Το παράδειγμα του συναρτησιακού προγραμματισμού δεν είναι εύκολο, επομένως είναι δύσκολο να κατανοηθεί από αρχάριους.
- Δύσκολο να συντηρηθεί καθώς πολλά αντικείμενα εξελίσσονται κατά την κωδικοποίηση.
- Χρειάζεται πολλή προετοιμασία και εκτεταμένη περιβαλλοντική ρύθμιση.
- Η επαναχρησιμοποίηση είναι πολύ περίπλοκη και απαιτεί συνεχή αναπροσαρμογή.
- Τα αντικείμενα ενδέχεται να μην αντιπροσωπεύουν σωστά το πρόβλημα.
Λειτουργικός Προγραμματισμός εναντίον Αντικειμενοστρεφούς Προγραμματισμού
| Λειτουργικός προγραμματισμός | OOP |
|---|---|
| Το FP χρησιμοποιεί αμετάβλητα δεδομένα. | Το OOP χρησιμοποιεί Μεταβλητά δεδομένα. |
| Ακολουθεί ένα μοντέλο βασισμένο σε Δηλωτικό Προγραμματισμό. | Ακολουθεί ένα Μοντέλο Προστακτικού Προγραμματισμού. |
| Αυτό στο οποίο εστιάζει είναι: «Τι κάνετε στο πρόγραμμα». | Αυτό στο οποίο εστιάζει είναι: «Πώς κάνετε τον προγραμματισμό σας». |
| Υποστηρίζει παράλληλο προγραμματισμό. | Δεν υποστηρίζεται ο παράλληλος προγραμματισμός. |
| Οι λειτουργίες του δεν έχουν παρενέργειες. | Μια μέθοδος μπορεί να προκαλέσει πολλές παρενέργειες. |
| Ο Έλεγχος ροής εκτελείται χρησιμοποιώντας κλήσεις συναρτήσεων και κλήσεις λειτουργίας με αναδρομή. | Η διαδικασία ελέγχου ροής διεξάγεται χρησιμοποιώντας βρόχους και εντολές υπό όρους. |
| Η σειρά εκτέλεσης των δηλώσεων δεν είναι πολύ σημαντική. | Η σειρά εκτέλεσης των δηλώσεων είναι σημαντική. |
| Υποστηρίζει και τους δύο «Κοιλιακούς»tracση πάνω από τα Δεδομένα» και «Απόλυταtracσχέση με τη Συμπεριφορά. | Υποστηρίζει μόνο "Ab"tracση πάνω στα Δεδομένα". |

