In tanti mi chiedono
come implementare una funzione di Eval come quella di Javascript da usare nei loro progetti in .net.
Eval è una funzione molto potente che accetta come unico parametro una stringa. Quella stringa può essere una qualsiasi espressione in javascript che può essere valutata ed eseguita. Questo vuol dire che io in quella stringa potrei scrivere anche un programma in javascript e tramite la
eval eseguirla.
Facciamo un esempio per chiarire le idee. Per lanciare un avviso all'utente in javascript, si può usare la funzione alert che crea un piccolo popup con un messaggio. Lo posso scrivere in questo modo:
alert('messaggio per gli utenti')
oppure lo posso anche scrivere in questo modo
var codice = "alert('messaggio per gli utenti')";
eval(codice);
il risultato delle due porzioni di codice è esattamente identico. La seconda ha il vantaggio che il contenuto della variabile codice potrebbe provenire da un database o dall'input dell'utente (ovviamente facendo sempre attenzione alle problematiche di sicurezza, per evitare che sulle nostre pagine venga eseguito codice non autorizzato).
Allo stesso modo posso usare eval per eseguire espressioni matematiche e quindi potrei scrivere qualcosa del genere
var codice = "2+5*(2+4)";
var risultato = eval(codice);
alert(risultato);
Anche in questo caso la variabile codice potrebbe provenire da un input dell'utente, e quindi queste righe di codice permettono di creare un risolutore di espressioni aritmetiche.
Ed è appunto quello che mi stanno chiedendo in tanti in questi giorni a proposito del .net.
In .net non esiste una metodo equivalente all'eval di javascript, però ce lo possiamo costruire. In questo post vedremo come fare un eval aritmetico. Per realizzare un eval che possa eseguire qualsiasi porzione di codice rimandiamo ad un post futuro, in quanto è meno semplice del realizzare un eval aritmetico.
In .net, abbiamo sulla classe
DataTable, che normalmente viene usata per memorizzare dati proveniente da un database, un metodo che prende il nome di
Compute che permette di effettuare dei conteggi e delle operazioni sui dati contenuti nell'oggetto.
Quello che possiamo fare è usare questo metodo, non propriamente per quello che è stato usato. Ovvero invece di fargli fare operazioni sui dati nel DataTable, gli faremo fare operazioni senza alcun riferimento ai dati, ottenendo un valutatore di espressioni aritmetiche. E quindi possiamo scrivere in questo modo (lo scriverò usando il Visual Basic.net per semplicità, ma può essere facilmente convertito in C#):
Dim Espressione as String ="4+5*(2+6)/3"
Dim TabellaDiAppoggio as new DataTable()
Dim Risultato as Decimal = TabellaDiAppoggio.Compute(Espressione)
Come vedete è molto facile.
Happy coding. :-)