Una alle feature più interessanti di JavaScript 1.7 è il cosiddetto "destructuring assignment", tra l'altro già presente in altri linguaggi (es. Python). In sistesi è la possibilità di estrarre dati da array con la sintassi literal utilizzata solitamente per costruirli. Facciamo un esempio:
function f()
{
return [1, "Hello"];
}
var x, y;
[x, y] = f(); // x = 1, y = "Hello"
La sintassi literal tipica per la costruzione di un array JavaScript questa volta compare alla sinistra dell'uguale. I suoi elementi vengono valorizzati con i corrispondenti elementi dell'array che sta a destra dell'uguale. C'è una funzionalità correlata per gli oggetti ma non è l'obiettivo del post.
In sostanza viene eseguita una unificazione dell'espressione a sinistra dell'uguale con quella di destra: è possibile trovare almeno un valore per le "incognite" x e y affinchè l'espressione di sinistra e di destra siano sintatticamente "uguali". L'unificazione è un concetto che si trova in logica ed è un elemento fondamentale del Prolog, linguaggio a paradigma logico. Tra l'altro, tra i tanti algoritmi di unificazione, uno è stato ideato da due illustri docenti e ricercatori italiani: Martelli e Montanari.
L'unificazione è un concetto generale e quindi sarebbe ad esempio possibile applicarlo per unificare due lambda expression C# 3.0:
ExprA ExprB
(x, y) => new int[] { x, y }; UNIFICA A () => new int[] { 10, 20 };
Ovvero: esiste almeno un valore per i parametri x e y affinchè ExprA sia sintatticamente uguale a ExprB? La risposta, in questo caso, è chiaramente sì, basta attribuire a x il valore 10 e a y il valore 20. La cosa può chiaramente essere generalizzata con body di lambda expression che fanno qualsiasi cosa.
Si potrebbe quindi costruire un metodo (ad es. statico) di una classe che esegue l'unificazione di due lambda expression, ovvero una cosa del tipo:
LogicHelpers.Unify( (x, y) => new int[] { x, y }, () => new int[] { 10, 20 } )
ottenendo sostanzialmente qualcosa di analogo a quello che si ha in JavaScript 1.7 (o Python, ...). Se inoltre ci fosse una sintassi per esprimere più semplicemente la cosa...