Merhaba herkese iyi bayramlar.
Bugün yazılımgünlüğünde bir makale gördüm ve bunu bende kendi bloğumda yayınlamak istiyorum dedim ve yazmaya başladım. VB.NET ile yazılan makaleye bu linktenulaşabilirsiniz. Şimdi benim makaleme başlayabilirim.
Değişkenler referans ve değer tipleri olmak üzere ikiye ayrılır. Referans tipleri null değer alabilirken değer tipleri null olarak bir değer alamazlar. Sebebi referans tipler ram’da bir adresi işaret ederken değer tipleri direk değeri tutarlar.
.net 2.0 ile birlikte değer tiplerine null değer atanabilmekte. bunu yapabilmek için 2 tane yol var (başka yollar varsa beni bilgilendirin lütfen :) ). Bunlardan ilki Nullable jeneriği.
static void Main(string[] args)
{
Nullable<int> sayi;
sayi = 5;
if (sayi.HasValue)
{
Console.WriteLine(sayi.Value);
Console.WriteLine(sayi);
}
else
{
Console.WriteLine("null");
}
sayi = null;
if (sayi.HasValue)
{
Console.WriteLine(sayi.Value);
Console.WriteLine(sayi);
}
else
{
Console.WriteLine("null");
}
}
Yukarıdaki kod parçasında da görüldüğü gibi Nullable jeneriğini kullandık. Nullable nesnemizi tanımladığımız zaman iki yeni özelliğimizde beraberinde geliyor. HasValue ve Value.
HasValue değişkenin null olup olmadığını gösteriyor. null ile false değerini, herhangi bir değer aldıysa true değerini alıyor. null olan bir değeri işlemde kullanmak çalışma zamanında hata vereceğinden HasValue ile kontrol yapmak programı hatasız ve kararlı yapmada büyük rol oynuyor.
Value ise değişkene yüklü olan değeri alıyor ve sizin ulaşmanızı sağlıyor. Bunu kullanmadan direk olarak değişkeni kullanarakta değere ulaşabilirsiniz. Yukarıda ikisininde örneği var.
şimdi ise ? kullanımına bakalım.
static void Main(string[] args)
{
int? sayi;
sayi = 5;
if (sayi.HasValue)
{
Console.WriteLine(sayi.Value);
Console.WriteLine(sayi);
}
else
{
Console.WriteLine("null");
}
sayi = null;
if (sayi.HasValue)
{
Console.WriteLine(sayi.Value);
Console.WriteLine(sayi);
}
else
{
Console.WriteLine("null");
}
}
Aslında pek değişiklik yapmadık sadece tanımlamada bir değişiklik söz konusu.
Nullable<int> sayi; yerine int? sayi; olarak tanımlama yaptık. Buda kod yazarken bize hız sağlıyor. istediğiniz gibi kullanabiliyoruz.
Nullable kullanımı yularda anlattığım gibi. Kullanıma örnek verecek olursam,
Kullanıcıya bir konuda fikrini sorabilirsiniz ve sorunun 3 şıkkı olabilir. Evet, Hayır, Düşüneceğim gibi. Bu durumda short türünde bir değişken tanımlayıp cevaplara 1,2,3 diyebilirsiniz ama bunun yerine bool türünden nullable bir değişken oluştururak işinizi daha az bir ram kullanarak yapabilirsiniz :) daha bir çok örnek var ama heralde en saçma örnek bu olabilir. Siz örnekleri daha da geliştirebilirsiniz.
Umarım faydalı bir makale olmuştur iyi günler..