Clojure, concetti fondamentali V

Clojure_300x300_normal

Blocchi di codice: do

do esegue tutte le espressioni che gli vengono passate e ritorna il valore dell’ultima (progn del Lisp classico e begin di newLISP, esempio:

d0

Da notare che molte altre forme (fn, let, loop, try e le loro derivate come defn) racchiudono un do implicito nel loro corpo. Per esempio let:

d1

Definire vars: def

def definisce, o ridefinisce, una var nel namespace corrente

d2

Ci sono molte altre form per creare o ridefinire var, di solito il nome inizia con def: defn, defn-, defprotocol, defonce, defmacro, …
Però non tutte quelle che iniziano con def creano var: deftype, defrecord, defmethod.

Assegnazioni locali: let

let definisce var che locali all’espressione let stessa. Per esempio questo metodo (rudimentale) in Java:

public static double hypot (double x, double y) {
    final double x2 = x * x;
    final double y2 = y * y;
    return Math.sqrt(x2 + y2);
}

in Clojure diventa:


(defn hypot
    [x y]
    (let [x2 (* x x)
          y2 (* y y)]
        (Math/sqrt (+ x2 y2))))

x2 e y2 sono locali, definite solo all’interno del let. E similmente x e y sono locali a defn (come detto poche righe sopra).
Una nota per me: devo abituarmi, come qui, a scrivere il vettore degli argomenti su una riga a se, è infatti possibile inserire dopo il nome della funzione un commento esplicativo, come in questo caso:

d3

let ha un paio di caratteristiche semantiche molto diverse dai normali linguaggi:

1. Tutte le var locali sono immutabili. Si possono ridefinire con un let annidato ma non è possibile cambiarne il valore all’interno del let, cosa che elimina errori molto comuni.
Le forme speciali loop e recur vengono usate per il caso in cui i valori debbano cambiare (prossimamente).
Se davvero serve una variabile locale variabile c’è tutta una serie di form (prossimamente).

2. Il vettore di let è interpretato in fase di compilazione, per permettere il destructuring, cosa che consente di eliminare certi tipi di codice lunghi e noiosi.

Ecco qui ci sarebbe da parlare del destructuring, discorso troppo lungo, pausa 😉

Posta un commento o usa questo indirizzo per il trackback.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: