Opérateur coalescent nul (??)
Personnellement, je ne vois aucun inconvénient à utiliser cet opérateur. Considérez les trois exemples de code suivants, des nouveaux opérateurs «faciles» aux «complexes».
Sans magie:
bool isNameSet = false;
string name;
if ( isNameSet )
{
Console.WriteLine( name );
}
else
{
Console.WriteLine( "No name set." );
}
Opérateur ternaire:
bool isNameSet = false;
string name;
Console.WriteLine( isNameSet ? name : "No name set." );
Coalescence nulle:
string name = null;
Console.WriteLine( name ?? "No name set." );
La raison pour laquelle ces opérateurs ont été inventés est qu'ils représentent des opérations de programmation très courantes . Ne pas vouloir les utiliser parce que vous n'y êtes pas habitué, c'est simplement être têtu . Les langages évoluent, les fonctionnalités évoluent, apprenez à les utiliser!
mot-clé var
J'ai une opinion quelque peu différente sur le mot-clé var. Le type d'une variable donne souvent des informations supplémentaires sur votre code. Je trouve que masquer le type en utilisant le mot clé var rend parfois le code moins lisible. Vous savez moins à quoi vous attendre sans utiliser la saisie semi-automatique ou en survolant les identifiants pour voir ce qu'ils sont réellement. À mon avis, cela se traduit par du code qui est plus lent à lire / écrire.
J'utilise le mot-clé lorsque je trouve que le type ne donne pas beaucoup d'informations supplémentaires.
- Principalement dans les boucles foreach , que j'ai apprises de Resharper car c'est un paramètre là-bas. La plupart du temps, vous savez quel type de collection vous parcourez, vous savez donc que vous attendez des éléments de cette collection.
- Requêtes Linq . Les résultats des requêtes linq sont souvent des types génériques très complexes. L'affichage de ce type fait plus de mal que de bien.
- Noms de caractères longs qui sont simplement initialisés avec leur constructeur. Vous pouvez déjà dire quel est le type en regardant le constructeur.
Comme exemple pour la dernière déclaration:
ThisIsSomeSpecializedTypeRightHere duplication =
new ThisIsSomeSpecializedTypeRightHere();
var justAsReadable =
new ThisIsSomeSpecializedTypeRightHere(); // Less duplication.
// But I still prefer the following ...
int number = 9;
SomeCreatedType foo = Factory.CreateSomeType();
??
opérateur de fusion nulle après son explication, il ne devrait pas être autorisé à proximité du code de production.