In C# 6 è presente un nuovo meraviglioso operatore, syntactic sugar introdotto per eliminare costrutti semantici ridondanti inerenti il controllo dei valori null:
Si otterrà questa riga di codice:
Questo è uno degli esempi più semplicistici: si spera sia difficile avere tanti check sequenziali.
.
Ma non si ferma qui!
Se vogliamo definire un valore di ritorno che non sia null possiamo usare l'operatore binario ??.
Facendo così nel caso una qualunque cosa sia nulla avremo come valore di ritorno "non definito".
A mio avviso sinceramente può essere molto dannoso in molti casi:
Questi fattori, anche se non dovrebbero capitare, possono rendere difficile la comprensione di bug nei momenti più difficili, sopratutto se il programmatore che ha scritto o che sta interpretando il codice non è esperto, o se il codice ha altri problemi (es: se programmi SOLID non dovrebbe capitarti di usarlo così spesso).
Devo dire che mi piace questo nuovo operatore, anche se è facile intuire i numerosi problemi che porterà a molti quando usato incautamente.
State all'occhio!
![]() |
Non mi sto chiedendo cosa stia succedendo, questo è l'operatore di propagazione. |
- Null propagator
- Operatore che permette di passare il valore di una proprietà senza fare check espliciti sull'oggetto che la contiene.
Esempio
Da questo codice:var nomeOperatore =
linguaggio.Operatori == null ? null :
(linguaggio.Operatori.GetPropagatoreNull() == null ? null :
linguaggio.Operatori.GetPropagatoreNull().Nome);
Si otterrà questa riga di codice:
var nomeOperatore =
linguaggio.Operatori?.GetPropagatoreNull()?.Nome;
Sono stati sostituiti due operatori condizionali ternari con due propagatori di null, implicitando il ritorno di valori null in caso di oggetto vuoto.Questo è uno degli esempi più semplicistici: si spera sia difficile avere tanti check sequenziali.
La magia
La magia di questa istruzione è che quando viene applicata a value type trasforma questi in nullable:var veroFalso = codice?.Vincente;
Infatti se Vincente è un bool, veroFalso sarà ora un Nullable<bool>var nomeOperatore =
linguaggio.Operatori?.GetPropagatoreNull()?.Nome ?? "non definito";
L'operatore di propagazione del null è dannoso??
distrazioni copia/incolla refactoring approssimativi typos
Comments
Post a Comment