Campi privati in Javascript

Con la traduzione di quest’ultimo pezzo penso di concludere la serie di traduzioni dei testi presenti sul sito di Douglas Crockford. Si è trattato di pezzi interessanti che hanno coperto aspetti del linguaggio Javascript che solitamente misconosciuti. Almeno per me lo erano, e non potrò mai ringraziare abbastanza l’autore per averli scritti ed avermi concesso di pubblicarne la traduzione.

In questo post Crockford illustra la possibilità di utilizzare le chiusure per dotare gli oggetti Javascript di membri privati. Al solito non si limita a riportare un pattern di programmazione ma si sofferma sulla sua implementazione e sui meccanismi che gli stanno dietro.

Buona lettura.

Continua a leggere “Campi privati in Javascript”

Javascript: Ereditarietà basata su delega (Eredità prototipale)

Dopo la traduzione dell’illuminante divertissement sull’ereditarietà classica in Javascript. Douglas Crockford arriva a commentare il suo stesso articolo (a distanza di qualche anno) affermando che l’ereditarietà prototipale è di gran lunga più potente ed espressiva di quella basata su classi e che più si conosce Javascript e meno si utilizza ed apprezza quest’ultima. Ragione per cui ho deciso di tradurre anche il pezzo di Crockford che tratta l’ereditarietà prototipale. Ho invertito la posizione delle date rispetto alla versione originale mettendole all’inizio del parte di testo a loro associato, piuttosto che alla fine, perché la cosa mi lasciava un pò perplesso. Si tratta solamente di gusti personali, però.

Buona Lettura

Continua a leggere “Javascript: Ereditarietà basata su delega (Eredità prototipale)”

Javascript: Il piccolo programmatore Javascript

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

Continua a leggere “Javascript: Il piccolo programmatore Javascript”

Golf Programming: permutazioni

Proseguiamo con il golf programming con un nuovo problema da risolvere.
Anche questa volta si tratta di un classico (anche se programmarlo secondo le regole del golf me lo ha fatto vedere sotto una nuova luce).

Le Regole

Per che non le ricordasse, e per chi comincia da questa puntata a seguire la rubrica, riporto le regole:

  1. Scrivere un programma, il più breve possibile, che risolva il problema enunciato prima e riportato meglio qui sotto;
  2. per ogni linguaggio utilizzato è considerato vincitore il programma scritto usando meno caratteri;
  3. l’efficienza dell’algoritmo non è un fattore fondamentale ma il programma deve terminare senza errori;
  4. si può optare, se più concisa, per una funzione, piuttosto che un programma intero;
  5. ovviamente non di vince niente se non la soddisfazione di aver accettato una sfida ed averla vinta.

L’algoritmo

L’algoritmo da implementare deve, data una stringa, calcolare tutte le sue possibili permutazioni.
Al solito, un esempio servirà a chiarire tutto meglio di una descrizione formale:

data in input la stringa abc, il programma deve stampare, le stringhe abc, acb, bac, bca, cab e cba.

Ovviamente l’ordine delle stringhe restituite non è importante mentre lo è non riportare ripetizioni: la stringa aba, ad esempio, deve dare come risultato solamente aba, aab e baa.

A parte i soliti rubysti che avranno sicuramente un costrutto nel linguaggio tipo .permuta secondo me si tratta di una sfida stimolante, specie per chi volesse risolverla in ricorsione. Come le altre volte, posterò la mia soluzione nel prossimo fine settimana. Buona sfida.

Golf programming: veni vidi dixi

Se le mie reminiscenze di latino non mi ingannano veni, vidi, dixi dovrebbe essere la parafrasi del ben più famoso detto di Giulio Cesare.

Proseguiamo con il golf programming con un nuovo problema da risolvere. Le regole sono uguali a quelle dell’altra volta:

  1. Scrivere un programma, il più breve possibile, che risolva il problema enunciato prima e riportato meglio qui sotto;
  2. per ogni linguaggio utilizzato è considerato vincitore il programma scritto usando meno di caratteri;
  3. l’efficienza dell’algoritmo non è un fattore fondamentale ma il programma deve terminare senza errori;
  4. si può optare, se più concisa, per una funzione, piuttosto che un programma intero;
  5. ovviamente non di vince niente se non la soddisfazione di aver accettato una sfida ed averla vinta.

L’algoritmo

L’algoritmo da implementare deve, dato un numero, calcolare il successivo termine della sequenza look and say, una particolare successione matematica costruita descrivendo i diversi termini. Un esempio servirà a chiarire tutto meglio di una descrizione formale; scriviamo i primi cinque membri della successione che comincia con 1:

1, 11, 21, 1211, 111221, …

il primo termine è il seme della sequenza ed è scelto senza nessun vincolo. Il secondo termine descrive il primo, in questo caso abbiamo un numero uno e quindi otteniamo 11. Il terzo termine descrive (si tratta di due cifre 1) il secondo ottenendo 21, il quarto 1211 “legge” il terzo che contiene un due ed un uno e, seguitando, il quinto termine, è 111221. Il sesto, ovviamente, corrisponde a 312211.

Partenza

La sfida consiste nello scrivere una funzione che preso in input un termine qualunque della sequenza, ne restituisca il successivo.

Come al solito aspetterò fino alla fine della settimana per postare la mia versione. Chi volesse cimentarsi non ha altro da fare che postare la propria soluzione tra i commenti.

Eineki

Golf programming: Venerdi 13.

Siete capaci di scrivere un programma, nel linguaggio che più padroneggiate, per calcolare e stampare, dato un anno,  quali venerdì tredici ci sono dentro? Se pensate di rispondere si, potreste provare a scriverlo come se giocaste a golf (e poi, magari, potreste postare la vostra soluzione in un commento qui sotto).

Il golf programming è una disciplina per programmatori, consiste nello scrivere il programma più breve possibile per risolvere un determinato problema. Ho visto qualche prova a riguardo nel sito stackoverflow.com, in inglese, ed ho pensato di riproporla su queste pagine, giusto per sciogliere un po’ i muscoli delle dita e scrostare qualche ingranaggio del cervello.

Le regole sono semplicissime:

  1. Scrivere un programma, il più breve possibile, che risolva il problema enunciato prima e riportato meglio qui sotto;
  2. per ogni linguaggio utilizzato è considerato vincitore il programma scritto usando meno di caratteri;
  3. l’efficienza dell’algoritmo non è un fattore fondamentale ma il programma deve terminare senza errori;
  4. si può optare, se più concisa, per una funzione, piuttosto che un programma intero;
  5. ovviamente non di vince niente se non la soddisfazione di aver accettato una sfida ed averla vinta.

La sfida di oggi, come anticipato consiste nello scrivere un programma che, dato un anno di questo secolo (e quindi dal 2000 al 2099), stampi a video, o mostri su una pagina web, quali sono i venerdi 13, se ne esistono, che cadono in quell’anno. Non c’è bisogno di validare l’input (si assume che il dato in ingresso sia sempre valido) e l’elenco dei diversi giorni può essere separato dal carattere che ritenete più opportuno.L’anno deve essere nel formato a quattro cifre. Ovviamente non vale utilizzare funzioni predefinite che restiuiscono il giorno della settimana a partire da una data.

Ad esempio, per il 2009 bisogna stampare 13 Febbraio 2009, 13 Marzo 2009 o 13 Feb 2009, 13 Mar 2009 oppure, ancora 13/02/2009 , 13/03/2009

Se vi state chiedendo cosa ho fumato stasera per venirmene fuori con un problema del genere, sappiate che non fumo e che non ho visto, causa bidone,  il remake dell’omonimo film.

Aggiungeteci che il protagonista del film si chiama J(a)son e capirete perché la mia versione sarà scritta in javascript.

Per ora è tutto, domenica mattina, tra i commenti troverete la mia soluzione.

Uno spunto sugli algoritmi da utilizzare potete trovarlo in questa pagina in inglese sull’algoritmo del giorno del giudizio. E’ in inglese, ma un inglese talmente elementare che anche google riesce a tradurlo quasi decentemente 😉 Se qualcuno avesse riferimenti in italiano allo stesso algoritmo e volesse indicarli tra i commenti è sicuramente il benvenuto.