PureScript — Αναλυτικός οδηγός εξάσκησης — DedSec Project
PureScript — καθαρός υπολογισμός έναντι παρενεργειών Σύγκρινε δύο υπογραφές τύπων Η double μετατρέπει το 21 σε 42 χωρίς εκτύπωση. Η main χρησιμοποιεί ρητά Effect για έξοδο στην κονσόλα…
PureScript — καθαρός υπολογισμός έναντι παρενεργειών
Σύγκρινε δύο υπογραφές τύπων
module Main where
import Prelude
import Effect (Effect)
import Effect.Console (logShow)
double :: Int -> Int
double n = n * 2
main :: Effect Unit
main = logShow (double 21)
Η double μετατρέπει το 21 σε 42 χωρίς εκτύπωση. Η main χρησιμοποιεί ρητά Effect για έξοδο στην κονσόλα. Δοκίμασε το δείγμα σε συμβατό PureScript/Spago project με πραγματικά εγκατεστημένες βιβλιοθήκες.
Προκάλεσε σφάλμα τύπου
Βάλε logShow μέσα στη double κρατώντας τον τύπο Int -> Int. Εξήγησε γιατί το αποτέλεσμα Effect δεν είναι Int και γιατί η αλλαγή υπογραφής χωρίς επανεξέταση σχεδιασμού δεν αποτελεί λύση.
Άσκηση με καθαρή συνάρτηση
Υλοποίησε map πάνω σε πίνακα ακεραίων και έλεγξε κενό πίνακα, μηδέν και αρνητικές τιμές. Άφησε την έξοδο μόνο στο σημείο Effect. Κράτησε πραγματικά diagnostics και εκδόσεις όταν εκτελέσεις δοκιμή. Δεν έγινε build στο πλαίσιο αυτού του ελέγχου.
Μετέφερε υπολογισμό χωρίς αλλαγή παρενεργειών
Μέσα στη main δημιούργησε καθαρή τοπική τιμή result = double 21 και μετά τύπωσέ την με logShow. Το ορατό αποτέλεσμα δεν πρέπει να αλλάξει, επειδή η double δεν έχει παρενέργειες. Αν όμως η εκτύπωση μετακινηθεί μέσα στη βοηθητική συνάρτηση, πρέπει να αλλάξει το συμβόλαιο επιστροφής και η σειρά εκτέλεσης των effects. Γράψε δεύτερη καθαρή συνάρτηση που επιστρέφει Nothing για μη έγκυρη είσοδο χρησιμοποιώντας Maybe. Σύγκρινε το Maybe, που δηλώνει απουσία τιμής, με το Effect, που δηλώνει ενέργεια στον εξωτερικό κόσμο. Επαλήθευσε με πραγματικό test runner και όχι με ανάγνωση annotations μόνο.
PureScript
Συνήθης χρήση: Συναρτησιακός προγραμματισμός.
Προτεινόμενη επέκταση αρχείου: .purs.
Εκτέλεση / περιβάλλον: Μεταγλώττιση σε έργο PureScript (spago).
Αρχικό παράδειγμα
module Main where
import Prelude
import Effect (Effect)
import Effect.Console (log)
main :: Effect Unit
main = log "Hello, Ada!"
Πώς διαβάζεται
Οι τύποι Effect κάνουν ρητές τις παρενέργειες.
Συνηθισμένο λάθος
Οι τύποι Effect κάνουν ρητές τις παρενέργειες. Έλεγξε την έκδοση διερμηνευτή/μεταγλωττιστή και μην εκλαμβάνεις το δείγμα ως έτοιμη εφαρμογή παραγωγής.