Experimentalia

Appunti raminghi

Javascript: Il piccolo programmatore Javascript

with 2 comments

Una traduzione “di servizio” che completa, nel senso che traduce uno dei link che si incontrano, il primo a voler essere pignoli, nella traduzione precedente.

Il tutto in attesa di arrivare alla traduzione di un pezzo sull’ereditarietà in javascript che è una piccola perla di rara concisione e chiarezza (ovviamente a mio parere).

Al solito i commenti sono aperti d in attesa di suggerimenti e correzioni.

Buona lettura

Il piccolo programmatore Javascript

Titolo originale: The little Javascripter

Douglas Crockford (www.crockford.com)

Il piccolo programmatore LISP (the little LISPer)

Nel 1974, Daniel P. Friedman pubblicò un libro intitolato The Little LISPer. Contava solamente 68 pagine ma faceva una cosa degna di nota: Poteva insegnarvi a pensare ricorsivamente. Usava una specie di dialetto di LISP (che all’epoca veniva scritto tutto in maiuscolo).

Quel dialetto non corrispondeva a nessuna implementazione reale di LISP. Questo però non era un problema perché non si trattava di un libro sul LISP, era concentrato sulle funzioni ricorsive. Non c’era bisogno di usare un computer per svolgere gli esercizi. Dopo aver letto il libro, ero cambiato. In meglio. Ci sono pochi libri che cambiano il modo di pensare dei propri lettori. E quello è uno di quelli.

Il formato è quello di un testo programmato sul lato sinistro con risposte sulla destra. L’utilizzo che se ne deve fare è leggere una domanda, pensarci su, dare una risposta e confrontare la propria con quella di Friedman.

Usa nomi di cibi come simboli da far manipolare dalle funzioni ed è disseminato di frecciatine che alleviano lo stress quando le cose diventano così complesse che la testa potrebbe scoppiarvi.

C’è anche una sezione riservata alle MACCHIE DI GELATINA!

Il libro ha subìto parecchie revisioni. L’ultima, The Little Schemer (Fourth Edition), aggiornata da Friedman e Matthias Felleisen, è molto più simile ad un vero linguaggio di programmazione, Scheme, ed ha nuovi capitoli che si addentrano ancora più a fondo nella teoria delle funzioni ricorsive e dei processori di linguaggi.

Felleisen era meno a suo agio con il formato precedente e quindi, invece che domande e risposte, mette su un dialogo matto simile a quello tra Sméagol e Gollum sui (quote (pesci)).

The Little Schemer non è un libro completo sulla programmazione. E’ debole su versanti pratici come la documentazione, programmazione difensiva e l’efficienza computazionale. La creazione dell’aritmetica partendo da tre primitive è affascinante dal punto di vista di un matematico quasi quanto orribilmente sconvolgente dal punto di vista di un informatico.

Tra l’altro non insegna molto di Scheme. Ne affronta solo una parte molto piccola.

A dispetto dei suoi difetti, il libro è molto fedele allo scopo per cui è stato scritto e proprio per questo funziona. Insegna una sola cosa, una cosa molto
difficile da insegnare, una cosa che ogni programmatore professionista dovrebbe conoscere, e conoscerla a menadito. Ci sono lezioni che vi resteranno impresse. Dovete agguantare un sandwich e studiare questo libro.

The Little JavaScripter

JavaScript ha molto in comune con Scheme. E’ un linguaggio dinamico. Ha un tipo di dati flessibile (array) che può simulare le espressioni-s. E, ancora più importante, ha le funzioni lambda.

Queste profonde analogie fanno in modo che tutte le funzioni in The Little Schemer possono essere tradotte in Javascript. Le sintassi dei due linguaggi sono molto differenti, e quindi abbiamo bisogno di alcune regole di trasformazione.

(define foo (lambda (a b c) (body))
var foo = function (a, b, c) {
    return body;
};
function foo(a, b, c) {
    return body;
}
(foo a b c)
foo(a, b, c)
(cond (p1 e1)
      (p2 e2) ...
      (else en))
p1 ? e1 :
p2 ? e2 : ...
en
(and p1 p2 ... pn)
(p1 && p2 ... && pn)
(or p1 p2 ... pn)
(p1 || p2 ... || pn)
(quote ())
null
(quote a)
'a'
(quote (a b c))
['a', ['b', ['c']]]
(quote (a . (b . (c . nil))))
foo?
isFoo
foo*
foostar
#t #f
true false

Prendete una copia di The Little Schemer e cominciate la ricorsione. Ho preparato un file che contiene le funzioni primitive (cons, cdr, etc.), un paio di funzioni (p and s) per convertire le espressioni-s in testo e viceversa, e molte delle funzioni del libro tradotte in Javascript.

Prestate particolare attenzione a The Applicative Order Y Combinator , uno dei concetti più strani e potenti dell’informatica.

function Y(le) {
    return (function (f) {
        return f(f);
    }(function (f) {
        return le(function (x) {
            return f(f)(x);
        });
    }));
}

Ancora più strano e meraviglioso, in questo libro sulla ricorsione non è menzionata da nessuna parte la funzione per il calcolo dei numeri fattoriali. Per questo motivo vi omaggio con il mio contributo personale alla trita e ritrita banalità:

var factorial = Y(function (fac) {
    return function (n) {
        return n <= 2 ? n : n * fac(n - 1);
    };
});

var number120 = factorial(5);

Mini Scheme in JavaScript.

Il capitolo finale di The Little Schemer è un piccolo interprete Scheme , capace di valutare molte delle espressioni presenti nel libro. Ho fatto un paio di modifiche, che vi permetteranno di inserire e lanciare tutte le funzioni Scheme.

Potete utilizzare le vostre funzioni Javascript come primitive Scheme, e quindi potrete ampliare le capacità dell’interprete senza modificarlo.

Funziona su una pagina web, e quindi potrete lanciare i vostri programmi Scheme con un normale browser web. Scrivete una funzione ben formata nell’apposita area di input e premete il grosso pulsante eval per vedere il risultato nell’area di output.

Non si tratta di un interprete che mira alla velocità o all’affidabilità, e quindi non siate troppo duri con lui. E’ comunque rapido, e sarà un valido aiuto per il libro.

(define l (quote (((hotdogs))(and)(pickle)relish) ))
(car (car l))

Usate le funzioni define e quote per inserire le espressioni-s.

Hotdogs!

About these ads

Written by Eineki

agosto 13, 2009 a 22:28 pm

Pubblicato su javascript, traduzioni

Taggato con , ,

2 Risposte

Iscriviti ai commenti con RSS .

  1. [...] di una falsa impressione perché Javascript ha più in comune con i linguaggi funzionali come Lisp or Scheme che con C o Java. Ha array invece che liste e oggetti al posto delle property list. Le funzioni [...]

  2. [...] The Little JavaScripter (Italian) [...]


Rispondi

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

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. 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 )

Google+ photo

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

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 45 follower

%d blogger cliccano Mi Piace per questo: