11 Aralık 2015 Cuma

C# 6.0 ile gelen 15 yeni özellik (1.Bölüm)

C# 6.0 ile gelen 15 yeni özelliği inceleyeceğimiz bu makale 3 bölümden oluşmaktadır. Her bölümde 5'er özellik örneklerle beraber anlatılacaktır.

C# dilinin ilk versiyonu 2002 yılında ve daha sonra 2005 yılında ikinci versiyonu yayınlandı. 2007 yılına geldiğimizde ise Linq, lamda expression, implicit typing, query syntax, var keyword ve 2010 yılında 4. sürümle beraber dynamic keyword ve dynamic language runtime ile tanıştık. 2012 yılında 5. versiyon yayınlandı. Bu versiyonda ise async ve await keywordleri ile tanıştık. Önceki versiyonlarla bu sürümü karşılaştırdığımızda çok etkili değişikliklerin olmadığını görüyoruz. Aslında bu normal bir şey çünkü C# dili 13 yaşının üzerinde ve geçen yıllar içersinde gerekli olan önemli özellikler zaten eklendi. Şimdi C# 6.0 ile gelen 15 güzel özelliği inceleyelim.

1. Auto-Property Initializers


Önceki versiyonlarda class içerisinde ki bir property'e default bir değer vermek istediğimizde bunu bir constructor ile yapıyorduk. C# 6.0 Auto-property initializers özelliği default değeri property'nin bir parçası olarak verme imkanı sağlıyor.

Önceki sürümlerde

[code lang="js"]

class Program
{
public Program()
{
MyProperty = 10;
}

public int MyProperty { get; set; }
}

[/code]

Yeni sürümde

[code lang="js"]

class Program
{
public int MyProperty { get; set; } = 10
}

[/code]

1. Static kullanımı


Static bir metodu çağırmak için onu nesne ile temsil etmeye gerek yoktur sadece tip adı nokta ve static metod adını yazdıktan sonra parantezler açılır ve parametreler girilir.
Bu özellik class adını belirtmeye gerek kalmadan direk olarak class içerisinde static metodlara erişmemize imkan sağlar. Genellikle bir değeri int olarak çevirmek istediğimiz de Convert.ToInt32 metodunu kullanırız. Artık sadece ToInt32 yazmak yeterli.

Eski sürümde

 

[code lang="js"]
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
var value = Convert.ToInt32("2015");
}
}
}

[/code]

Yeni Sürümde

 

[code lang="js"]
using Convert;

namespace TestApp
{
class Program
{
static void Main(string[] args)
{
var value = ToInt32("2015");
}
}
}
[/code]

Başka bir örnek

 

[code lang="js"]

using System.Console;
using System.Math;

class Program
{
static void Main()
{
WriteLine(Sqrt(25));
}
}

[/code]

3. Dictionary Initializers

C# 3 versiyonu yayınladıktan sonra dictionary ve listeler gibi koleksiyonlarda süslü parantezler içerisinde key value çiftini kullanmaya başladık. C# 6.0 ile baraber aynı kullanımı köşeli pazantezler içerisinde de gerçekleştirebiliyoruz.

Eski sürüm 

[code lang="js"]
Dictionary dict = new Dictionary<int, string>;
{
{1, "Apple" },
{2, "Microsoft" },
{3, "IBM" }
};
[/code]

Yeni sürüm 

[code lang="js"]
Dictionary dict = new Dictionary<int, string>;
{
[1] = "Apple",
[2] = "Microsoft",
[3] = "IBM"
};
[/code]

4. Auto-propertilerde sadece get kullanımı

C# 'ın önceki sürümlerinde otomatik implemente edilen propertileri kullandığımızda, mutlaka get ve set ifadelerini de kullanmak zorundaydık. Şayet property'i set etmeyecekseniz private ekini koyabilirdiniz. C#  6.0 ile bu ifadeyi direk çıkarabilir ve propertyi readonly yapabilirsiniz.

 

Eski sürüm 

[code lang="js"]
public int MyProperty { get; private set; }
[/code]

Yeni sürüm 

[code lang="js"]
public int MyProperty { get; }
[/code]

5. Null-şartlı operatörleri (?.)

C# 6.0 ile gelen gerçekten güzel bir özellik. Uygulamalarımızda genellik if şartını kullanırız. Artık tek bir satırda, değerin null olup olmadığını kontrol edip şayet null değilse işlemimize devam edebileceğiz ayrıca genelde karşılaştığımız sinir bozucu NullReferenceException hatasından da kurtuluyoruz.

 

Eski sürüm 

[code lang="js"]
public string Truncate(string value, int length)
{
string result = value;
if (value != null)
{
result = value.Substring(0, value.Length - 1);
}

return result;
}
[/code]

Yeni sürüm 

[code lang="js"]
public string Truncate(string value, int length)
{
return value?.Substring(0, value.Length - 1);
}
[/code]

Diğer örnekler 

[code lang="js"]
int? length = musteriler?.Length; // null if musteriler is null
Customer first = musteriler?[0]; // null if musteriler is null
int length = musteriler?.Length ?? 0; // 0 if musteriler is null

[/code]


2. ve 3. bölüm hazır olduğunda link vereceğim.

Hiç yorum yok:

Yorum Gönder