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#.