Quali sono alcuni casi in cui gli alberi delle espressioni sono utili?
-
09-06-2019 - |
Domanda
Capisco perfettamente il concetto di alberi delle espressioni, ma ho difficoltà a trovare situazioni in cui siano utili.Esiste un'istanza specifica in cui è possibile applicare gli alberi delle espressioni?Oppure è utile solo come meccanismo di trasporto del codice?Sento che mi manca qualcosa qui.Grazie!
Soluzione
Oppure è utile solo come meccanismo di trasporto del codice?
È utile come file meccanismo di esecuzione per codice.Usando il modello dell'interprete, gli alberi delle espressioni possono essere interpretati direttamente.Questo è utile perché è molto facile e veloce da implementare.Tali interpreti sono onnipresenti e utilizzati anche in casi che non sembrano “interpretare” nulla, ad es.per stampare strutture nidificate.
Altri suggerimenti
Alcuni framework di mocking dei test unitari fanno uso di alberi delle espressioni per impostare aspettative/verifica fortemente tipizzate.Cioè:
myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method
// SomeMethod was called with
// someObject as the argument
In questo caso l'espressione non viene mai effettivamente eseguita, ma l'espressione stessa contiene le informazioni interessanti.L'alternativa senza alberi di espressione sarebbe
myMock.Verify("SomeMethod", someObject) // we've lost the strong typing
Gli alberi delle espressioni sono utili quando è necessario accedere alla logica della funzione per modificarla o riapplicarla in qualche modo.
Linq to SQL è un buon esempio:
//a linq to sql statement
var recs (
from rec in LinqDataContext.Table
where rec.IntField > 5
select rec );
Se non avessimo alberi delle espressioni, questa istruzione dovrebbe restituire tutti i record e quindi applicare la logica where C# a ciascuno.
Con alberi di espressione quello where rec.IntField > 5
può essere analizzato in SQL:
--SQL statment executed
select *
from [table]
where [table].[IntField] > 5