Local Functions Method içinde Method Tanımlama

Selamlar,

Bu makale C#7.0’da olması muhtemel Yerel Fonksiyon kavramına deyineceğiz. Yani bir method içine tanımlanabilecek fonksiyonlar ve faydalarından bahsediceğiz. Bu yazıda anlatılanlar şu anki C# sürümünde yoktur. Bir sonraki C# 7.0’da ola da bilir, olmaya da bilir. Sizin de fikriniz ya da bu şekilde de kullanılabilir dediğiniz bir durum olur ise lütfen paylaşmaktan çekinmeyin. Ben method içine tanımlanabilecek bir fonksiyonun kullanışlı olabileceği bir kaç senaryo oluşturdum. Şimdi gelin hep beraber bunları inceleyelim.

  1. İlk senaryoda Ürünler ve Stok bilgisinin tutulduğu 2 farklı dizi düşünelim. Bu listede ürünler ve stok ayını dizi sırasında ilerlemektedir. İlk diziden ürün bilgisi, ikinci diziden ürün stok bilgisi alınmaktadır.

Yukarıda görüldüğü “GetAllProductStock()” adında bir method 3 parametre almaktadır.

  • 1. parametere List<product>
  • 2. parametre List<stock>
  • 3.parametre Report() adında bir function’dır.

Her iki dizi tek tek dönülerek “Report()” methoduna parametre olarak verilerek bir değer döndürülmektedir. Bu durumda eğer ilgili listelerden değer dönmez ise “null” hatası alınır. Aynı zamanda parametre olarak geçilen function da null olabilir. Bu durumda aşağıdaki gibi bir kontrol yapmak ve geri dönüş için ayrı bir method oluşturmak bu sorunu çözebilir.

Local Function kullanarak tam bu noktada okunurluğu arttıralım:

  • Local Function(Yerel Fonksiyon) hiçbir parametre almamıştır.
  • “GetAllProductsStock()” tüm değişkenleri ve “Yerel Function”‘ı kapsamaktadır. Böylece tanımlanması gereken değişken ve hata olasılığı minimum’a indirilmiştir.
  • Tüm kontrol işlemleri Ana Method olan “GetAllProductsStock()” methodunda yapılmakta ve öteleme işlemi “Local Function”‘da gerçekleştirilmektedir.

2. İkinci senaryoda “WaitForaWhile()” methodunda belirtilen sürenin belirli bir katsayısı kadar asenkron olarak bekletilip, geçen toplam süre geri dönülmektedir.

Kodu aşağıdaki gibi değiştirdiğimizde methodun çağrılma esnasında asenkron yapısı yüzünden hata alırız. Bunun için “DelayJob()” methodu başına “await” yazılıp beklenmeli ve “WaitForWhile()” methodunun başına da “async” yazılmalıdır.

Bazı durumlarda methodlar asenkron yapıyı desteklemeyebilirler yada çağrıldıkları tüm methodların da asenkron hale getirilmesi gerekmektedir. İç içe sarmal 10 katmanlı bir yapıda tüm katmanların böyle bir durumda güncellenmesi gerekmektedir. İlgili durum aşağıdaki “Local Function” ile ortadan kaldırılabilir. Böylece ilgili method altında tanımlanan function sayesinde var olan “WaitForWhile()” methodu ve varsa bunu kullanan diğer methodlar değişmeden kalırlar. Sadece local tanımlanan function “async” yapılarak çözüme gidilebilir.

“Local Functionlar” ilerde gelir mi yoksa gelmez mi şu an için belirsiz ama bence sırf bu seneryolar için bile bir ilaç.  Ayrıca kodun okunurluğunun arttırılması ve yazımdaki sadelik cabası. Başta da söylediğim gibi sizin de aklınıza kullanılabileceği başka durumlar gelirse lütfen paylaşmaktan çekinmeyin.

Geldik bir makalenin daha sonuna. Yeni bir makalede görüşmek üzere hoşçakalın.

Kaynak: Bill Wagner’in makalesi kaynak alınarak yazılmıştır. http://thebillwagner.com/

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir