Clojure, concetti fondamentali III

Sì, continuo da qui e qui, ancora sui componenti fondamentali del linguaggio.

220px-Rich_Hickey

Namespaces

Esaminiamo cosa fa REPL (e quindi Clojure):

  • Read: il reader legge una rappresentazione testuale del codice e produce strutture dati, cioè liste, vettori, simboli, numeri stringhe, etc;
  • Evaluate: parecchi dei valori prodotti dal reader vengono valutati pe se stessi come i numeri, le stringhe e le keyword. Le liste abbiamo già visto come vengono valutate.

Resta da vedere come vengono valutati i simboli. La semantica della loro valutazione è legata ai namespaces, l’unità fondamentale della modularità in Clojure.
Tutto il codice in Clojure è definito e valutato all’interno di un namespace, l’equivalente di un modulo in Python o un package in Java.

Le vars (locazioni di memoria mutabili) sono associate a un simbolo nel namespace in cui sono definite. Sono definite usando la special form def, che opera solo nel namespace corrente. Definiamo adesso la var x nel namespace user (quello di default); il nome della var è il simbolo che è codificato nel namespace corrente:

ns0

possiamo accedere al valore di questa var usando questo simbolo:

ns1

il simbolo x non è qualificato per cui è assunto nel namespace corrente. Possiamo anche ridefinirlo:

ns2

I simboli possono essere namespace-qualified, nel qual caso vengono risolti in quello specifico namespace invece che nel corrente:

ns3

*ns* restituisce, come si vede dall’esempio, il namespace corrente.

I namespaces vedono anche le classi Java; tutte le classi di java.lang sono importate di default e possono così essere riferiti senza qualificarli; per riferire una classe non importata si deve qualificare. Ogni simbolo che nomina una classe viene valutato in quella:

ns4

Inoltre tutti i namespaces hanno un alias  nel namespace primario della libreria standard di Clojure, clojure.core. Per esempio la c’è la funzione filter, definita in clojure.core che può essere riferita senza qualificarla:

ns5

Ma per i namespaces ci sarebbe ancora altro da aggiungere. Prossimamente.

Come in un prossimo post continuerà questo noioso esame dei concetti fondamentali, forse 😉

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: