Completiamo questa serie sulla
proposta di specifiche C# 3.0 con questo penultimo articolo sui due
pezzi forti – legati comunque alle altre innovazioni introdotte –, gli ultimi due paragrafi delle nuove specifiche, le
query expressions e gli
expression trees.
Come ormai sanno anche i sassi, le prime forniscono una sintassi integrata nel linguaggio per interrogazioni simili a quelle effettuate con linguaggi come SQL o XQuery. E' a dir poco stupefacente vedere delle interrogazioni
select con annesse
where,
orderby e
group, dei
join e delle assegnazioni con
let effettuate direttamente da C#.
E' da notare che, per preservare l'indipendenza dalla fonte dati, C# 3.0 non specifica la semantica di esecuzione di una
query expression, ma piuttosto la sua
traduzione in un insieme di invocazioni a metodi che seguono il
query expression pattern, elencati nel paragrafo 26.7.2 delle specifiche.
Tali metodi possono essere sia di istanza, che di estensione, dell'oggetto interrogato. Questo mapping semantico viene eseguito prima di ogni binding di tipo o risoluzione degli overload, ed alla data il compilatore C# ne garantisce la correttezza sintattica, ma
non che produca codice C# semanticamente corretto. Ad una
query expression viene applicata una serie di regole di traduzione – elencate, in ordine di precedenza e lungo l'arco di parecchie pagine, nelle specifiche – finchè non è possibile un'ulteriore riduzione. Ulteriori approfondimenti saranno disponibili nel prossimo ed ultimo articolo.