06 November, 2005

Tuples

Qualcuno (offline. Vi invito naturalmente a fare uso dei commenti) mi ha chiesto maggiori dettagli sul significato delle tuple (citate nel precedente post).
Dato che ho sottomano Nice provo a dare qualche esempio non prima però di una informale definizione: una tupla può essere vista come un insieme di valori referenziabili tramite un solo tipo. Ad esempio t1=("Tuples", 5, 't') è una tupla del tipo (String,int,char)
Si può dunque avere un metodo che ritorni più valori:

(int,int) minMax(int x, int y) = x < y ? (x,y) : (y,x);

oppure una ricerca che ritorni l'esito e l'eventuale posizione:

(boolean,int) search(int[] a, int val)
{
for( int i: 0..a.length-1)
if( a[i] == val ) return (true,i);
return (false,0);
}

Un qualcosa di più interessante sono i slick-iterator (iteratori smart embedded) sulle tuple che combinati con i metodi anonimi (simili alle classi anonime) possono dar vita a codice snello e pulito:

List<(String, String)> tuples = new ArrayList();
tuples.add(("a", "1"));
tuples.add(("b", "2"));
tuples.foreach
(
((String letter, String number)) =>
println("letter: "+letter+" number: "+number)
);

Il codice merita qualche secondo di "osservazione" per superare il gap sintattico ma poi tutto risulta semplice. L'unico punto di attenzione è la definizione "a volo" di un metodo anonimo (tramite l'operatore =>) alla cui destra compare l'implementazione.

Considerazione
A mio avviso Nice è un utile supporto a Java, non credo che farà "tremare" il mercato. E poi, da un altro punto di vista (come riportato anche da Bonniot, l'autore del linguaggio) è vera l'affermazione di Alan J. Perlis (il primo ad essere insignito del Turing Award nel 1966): "A language that doesn't affect the way you think about programming, is not worth knowing."

Labels:


Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?