clojurescript — συγκεντρωτικός οδηγός — DedSec Project
clojurescript — συγκεντρωτικός οδηγός ClojureScript Έννοια Η ClojureScript μεταγλωττίζεται σε JavaScript και χρησιμοποιεί persistent, συνήθως immutable, συλλογές σε web εφαρμογές…
ClojureScript
Έννοια
Η ClojureScript μεταγλωττίζεται σε JavaScript και χρησιμοποιεί persistent, συνήθως immutable, συλλογές σε web εφαρμογές.
Παράδειγμα πηγαίου κώδικα ή χρήσης
(def values [1 2 3])
(map inc values)
Άσκηση με συγκεκριμένο στόχο
Έλεγξε το νέο lazy sequence και επιβεβαίωσε ότι το αρχικό vector δεν μεταβλήθηκε. Σύγκρινε με JavaScript array.
Έλεγχος και διάγνωση
Ένα lazy sequence μπορεί να αναβάλει υπολογισμούς· δεν αποδεικνύει ότι side effects έχουν ήδη εκτελεστεί.
Σημείωσε την είσοδο, το αναμενόμενο αποτέλεσμα και το πραγματικό αποτέλεσμα στην εγκατεστημένη έκδοση της ClojureScript. Αν ο κώδικας δεν είναι προσβάσιμος από το κινητό, κράτησε το παράδειγμα ως μη δοκιμασμένο και εξήγησε τη σημασιολογία αντί να ισχυριστείς επιτυχία. Κάνε μια δεύτερη δοκιμή που απομονώνει μόνο τον μηχανισμό της άσκησης και κράτησε ακριβές σφάλμα με τρόπο που να μην εκθέτει προσωπικά δεδομένα.
Εργαστήριο εξάσκησης: ClojureScript
Δείγμα vector με πραγματικό compilation
Η ClojureScript παράγει JavaScript για browser ή Node.js και δεν ταυτίζεται με την Clojure του JVM. Σε προσωρινό namespace γράψε:
(ns practice.core)
(defn square [n] (* n n))
(def input [1 2 3])
(def output (mapv square input))
(assert (= [1 4 9] output))
(js/console.log (clj->js output))
Αναμένονται οι τιμές 1, 4, 9. Η mapv επιστρέφει νέο persistent vector και δεν μεταλλάσσει την αρχική input. Κάνε build με συμβατό ClojureScript compiler και πραγματικό JavaScript host. Κατάγραψε έκδοση compiler και runtime· η μορφή εξόδου μπορεί να διαφέρει ανά περιβάλλον.
Ισότητα τιμών ή ταυτότητα αντικειμένων;
Σύγκρινε (= [1 2] [1 2]) με ελέγχους ταυτότητας αναφορών. Η ισότητα persistent δομών στη ClojureScript δεν ταυτίζεται με τη σύγκριση δύο απλών JavaScript arrays. Μετά από clj->js έχεις native JavaScript τιμές και πρέπει να γνωρίζεις ποιος κανόνας σύγκρισης χρησιμοποιείται.
Άκυρα δεδομένα
Δοκίμασε (square "bad") σε προσωρινό πρόγραμμα και σημείωσε την πραγματική συμπεριφορά. Λόγω JavaScript host μπορεί να υπάρχουν μετατροπές ή μη αναμενόμενα αριθμητικά αποτελέσματα αντί για στατικό σφάλμα τύπου. Πριν πολλαπλασιάσεις δεδομένα JSON, έλεγξε number? και όρια τιμών. Δήλωσε αν απορρίπτεις, επιστρέφεις περιγραφικό σφάλμα ή φιλτράρεις.
Επέκταση browser
Εμφάνισε vector βαθμολογιών σε DOM text node με ασφαλή μέθοδο κειμένου, όχι με μη έμπιστο HTML. Έλεγξε κενή συλλογή, διπλές τιμές, Unicode labels και στοιχείο που λείπει. Μην παρουσιάζεις δοκιμές JVM ως απόδειξη λειτουργίας browser. Πηγή: https://clojurescript.org/