Marco Russo

.NET, Business Intelligence e dintorni

Corsi

Miei blog in inglese

Operatore ternario e di coalesce in Visual Basic 9

Nonostante sia molto raro per me usare Visual Basic... scrivendo un libro su LINQ ho lavorato a un capitolo in cui si confrontano le novità di Visual Basic 9 rispetto a C# 3.0.

Una novità introdotta dalla Beta 2 (che resterà tale anche in RTM) è la sintassi integrata per i nullable types con cui si può scrivere Integer? invece di Nullable( Of Integer). Per chi ha letto il libro, segnalo un post dove evidenzio una variazione che è avvenuta rispetto a quanto pubblicato qualche mese fa (comportamento dei cast tra nullable e non-nullable).

Altra novità è poi l'operatore If, che sembra Iif ma può essere usato anche come coalesce. In pratica, quello che in C# si scrive così:

a = b ?? 0;
c = (d != 0) ? n / d : 0;

In Visual Basic 9 si può scrivere così:

a = If( b, 0 )
c = If( d <> 0, n \ d, 0 )

L'assegnazione a c può stupire perché sembra identica all'uso di IIF, ma la differenza è che con IIF tutti i parametri vengono valutati, quindi n \ d (che è la divisione con risultato intero) genera un'eccezione quando d = 0. Usando la If, invece, solo l'argomento necessario in base al primo parametro (che è Boolean) viene valutato, l'altro no. In pratica si ottiene lo stesso comportamento dell'operatore ternario di C#.

Comments

devlizard said:

IIf mi resterà sempre in mente come la keyword che ho odiato di più ... forse perchè mi sono accorto che non cortocircuitava dopo quel centinaio (forse di +) di istruzioni portate da C# a VB.NET ... un po' alla cieca !

Certo che con questa novità bastava segare via solo un centinaio di "I" :-)

Ciao

Claudio

# ottobre 16, 2007 3.51