DedSec Project

ReasonML — Αναλυτικός οδηγός εξάσκησης — DedSec Project

ReasonML — πλήρης αντιστοίχιση προαιρετικών τιμών Μη συγχέεις Reason και ReScript Η Reason συνδέεται με το οικοσύστημα OCaml· το νεότερο ReScript μπορεί να χρησιμοποιεί διαφορετική σύνταξη…

ReasonML — πλήρης αντιστοίχιση προαιρετικών τιμών

Μη συγχέεις Reason και ReScript

Η Reason συνδέεται με το οικοσύστημα OCaml· το νεότερο ReScript μπορεί να χρησιμοποιεί διαφορετική σύνταξη. Σε κατάλληλο Reason toolchain εξέτασε:

let label = option =>
  switch (option) {
  | Some(value) => "value: " ++ value
  | None => "missing"
  };
let a = label(Some("Ada"));
let b = label(None);

Αναμένονται τα κείμενα "value: Ada" και "missing". Το switch αντιμετωπίζει ρητά τους δύο constructors του option. Η ακριβής σύνταξη και ο τελεστής σύνδεσης strings πρέπει να επιβεβαιωθούν στον συγκεκριμένο compiler.

Κενό string δεν σημαίνει None

Δοκίμασε Some(""). Η τιμή υπάρχει, έστω και κενή. Αν αφαιρέσεις τον κλάδο None, εξέτασε την προειδοποίηση μη εξαντλητικής αντιστοίχισης αντί να εικάζεις αποτέλεσμα.

Ανεξάρτητη άσκηση

Υλοποίησε parser που επιστρέφει option για μη κενό όνομα και χειρίσου None στον caller. Δοκίμασε κενό, κενά διαστήματα και ελληνικό όνομα. Κατάγραψε αν το περιβάλλον είναι Reason/OCaml ή ReScript και το αποτέλεσμα δοκιμής. Δεν δηλώνεται επιβεβαιωμένο build.

Διάλεξε σωστό οικοσύστημα πριν μεταφέρεις σύνταξη

Αρχείο .re χρειάζεται την κατάλληλη υποστήριξη Reason μέσα στο OCaml build, ενώ πολλά σύγχρονα έργα ReScript χρησιμοποιούν .res και δεν είναι βέβαιο ότι αποδέχονται το ίδιο παράδειγμα. Κατάγραψε πρώτα compiler, έκδοση και κατάληξη αρχείου. Έπειτα μεταγλώττισε τη μικρή συνάρτηση χωρίς UI. Μοντελοποίησε αναζήτηση χρήστη με option και δείξε γιατί None και Some("") είναι διαφορετικές καταστάσεις, ακόμη και όταν κακή μορφοποίηση τα εμφανίζει παρόμοια. Δοκίμασε και εμφωλευμένο option και εξήγησε πώς μια αυθαίρετη μετατροπή σε κενό string χάνει πληροφορία. Μην επινοείς όνομα όταν το αποτέλεσμα είναι None.

ReasonML

Μοντέλο λειτουργίας

Η ReasonML παρουσίασε διαφορετική σύνταξη στο οικοσύστημα OCaml. Νέα projects μπορεί να χρησιμοποιούν ReScript με διαφορετικό toolchain.

Παράδειγμα

/* Conceptual typed function */
let double = x => x * 2;

Δοκίμασέ το με νόημα

Εντόπισε compiler και package ecosystem πριν από την εκτέλεση· σύγκρινε Reason syntax με σύγχρονη ReScript.

Σφάλμα που πρέπει να ξεχωρίσεις

Μην θεωρείς ότι παλιά BuckleScript/Reason projects λειτουργούν αυτόματα σε νέους ReScript compilers.

Για να κρίνεις την άσκηση, κατέγραψε την αρχική είσοδο, την πρόβλεψη και την παρατήρηση σε πραγματικό, συμβατό περιβάλλον ReasonML. Δώσε ξεχωριστό παράδειγμα όπου αλλάζει μόνο μία μεταβλητή ή ένα όρισμα. Αν εργάζεσαι χωρίς την αναγκαία εφαρμογή, μελέτησε τη σύνταξη ως παράδειγμα και μην παρουσιάζεις το κείμενο ως εκτελεσμένο test.