Boş birleştirme operatörü (??)
Şahsen, bu operatörü kullanmanın hiçbir dezavantajı görmüyorum. 'Kolay' dan 'karmaşık' yeni işleçlere kadar aşağıdaki üç kod örneğini göz önünde bulundurun.
Sihir olmadan:
bool isNameSet = false;
string name;
if ( isNameSet )
{
Console.WriteLine( name );
}
else
{
Console.WriteLine( "No name set." );
}
Üçlü operatör:
bool isNameSet = false;
string name;
Console.WriteLine( isNameSet ? name : "No name set." );
Boş birleştirme:
string name = null;
Console.WriteLine( name ?? "No name set." );
Bu operatörlerin icat edilmesinin nedeni çok yaygın programlama işlemlerini temsil etmeleridir . Onları kullanmak istememek, çünkü onlara alışık değilsiniz, sadece inatçı olmaktır . Diller gelişir, özellikler gelişir, onları kullanmayı öğrenir!
var anahtar kelime
Var anahtar kelimesi hakkında biraz farklı düşüncelerim var. Bir değişkenin türü genellikle kodunuz hakkında ek bilgi verir. Var anahtar sözcüğünü kullanarak türü gizlemeyi buluyorum, bazen kodu daha az okunabilir hale getiriyor. Otomatik tamamlama kullanmadan veya gerçekte ne olduklarını görmek için tanımlayıcıların üzerine gelmeden ne bekleyeceğinizi daha az biliyorsunuz. Benim düşünceme göre, bu okuma / yazma daha yavaş kod ile sonuçlanır.
Türün fazladan bilgi vermediğini tespit ettiğimde anahtar kelimeyi kullanıyorum.
- Temelde , Resharper'dan öğrendim, orada bir ortam olduğu için foreach döngülerinde . Çoğu zaman, ne tür bir koleksiyona girdiğinizi biliyorsunuzdur, bu nedenle koleksiyondan öğeler beklediğinizi biliyorsunuzdur.
- Linq sorguları . Linq sorgularının sonucu genellikle çok karmaşık genel türlerdir. Bu türün gösterilmesi yarardan çok zarar verir.
- Yapıcılarıyla basitçe başlatılan uzun yazım adları. Yapıcıya bakarak türün ne olduğunu zaten söyleyebilirsiniz.
Son ifadeye örnek olarak:
ThisIsSomeSpecializedTypeRightHere duplication =
new ThisIsSomeSpecializedTypeRightHere();
var justAsReadable =
new ThisIsSomeSpecializedTypeRightHere(); // Less duplication.
// But I still prefer the following ...
int number = 9;
SomeCreatedType foo = Factory.CreateSomeType();
??
birleştirme operatörünü açıkladıktan sonra anlayamazsa, üretim koduna yakın bir yere izin verilmemelidir.