Tuples Nedir - C# 7.0

Tuple custom bir class oluşturmadan üzerinde birden fazla specific değer tutabilen bir veri yapısıdır. Diğer bir değişle; geriye birden fazla parametre döndürmek istediğimiz bir metot var diyelim ve bu parametreler için normalde gidip custom bir nesne oluşturup sonra gidip bu nesneyi initialize edip property'lerini set'leyip metottan return ederdik veya bu bahsettiğimizi yeni bir object tanımlamadan out parametresini kullanarak da geriye döndürebilirdik ancak bir çok kişiye göre hem biraz maliyetli olarak kabul edilir hemde out async metotlarda kullanılamamaktadır. Bunun yerine daha basit ve anlaşılır olan tuple kullanarak çok rahat bir şekilde metottan geriye birden fazla parametre return edebiliyoruz.

Tuple ilk olarak .net 4.0 ile hayatımıza girdi. C#7.O ile birlikte kullanım olarak çok daha basit bir hale getirilmiş ve sanki ilerleyen günlerde projelerimizde biraz daka sık kullanacağız gibi duruyor. 

Tuple System.ValueTuple namespace'i altında yer almakta ve ilgili namespace'i nuget üzerinden bulup projemize indirelim.

Örnek olarak aşağıdaki gibi 3 tane integer değer alan ToplamlariCarpimlari adında Tuple özelliği olan bir metot tanımlayalım ve bu metot geriye ilk değer olarak toplamlarını ikinci değer olarak bu sayıların çarpımlarından elde dilen sayıyı return ediyor olsun.

	public static void Main()
	{
		var sonuc = ToplamlariCarpimlari(2,5,7);
		
		Console.WriteLine(sonuc.toplami);
		Console.WriteLine(sonuc.carpimi);
	}
	
	public static (int toplami, int carpimi) ToplamlariCarpimlari (int x,int y,int z)
	{
	   var t = x + y + z;
	   var c = x * y *z;
		
	   return (t,c);
	}

Yukarıda olduğu gibi main function içerisinde metodumuzu çağırdıktan sonra return ettiği değeri sanki içerisinde toplami, carpimi adında iki property barındıran bir custom nesneymiş gibi rahatça kullanabiliyoruz ve intellisense de direkt olarak nokta "." operatörü kullanarak bu return değerlerini algılayabilmekte.

Tuple kısaca bu şekilde. Basit bir özellik gibi görünsede bizleri fazladan nesneler oluşturmaktan ve async metotlar out parametresini kullanamıyorken çok rahat bir şekilde yukarıdaki metodu async olarak yazmamıza olanak sağlamakta.

Comments (1) -

Add comment