C# İle Fonksiyonel Programlama — Delegeler

FP yöntemlerini ve Delege Türünü Tanıyalım

Ahmed Şeref Güneysu
3 min readJul 24, 2020

Bu yazımızda, C# ile fonksiyonel programlama yöntemlerini uygulayabilmek için delege türünü tanıyacağız.

Fonksiyonel Programlama Nedir

Fonksiyonel programlama, gerçek hayattaki problemlere bakış açımızı değiştiren bir yaklaşımdır.

Fonksiyonel yaklaşım için en temel gereksinimler:

  • Fonksiyonların değişkenler gibi tanımlanabilmesi
  • Fonksiyonların, fonksiyon döndürebilmesi
  • Fonksiyonların, diğer fonksiyonlara parametre olarak geçilebilmesi
  • Fonksiyonların birbiri ile etkileşime girebilmesi

gereklidir.

Delegeleri Tanıyalım

delegate türü, fonksiyonları kapsayan ve temsil edebilen türlerdir. Fonksiyonları değişken ve parametreler olarak ele alabilmek için delegeleri yoğun şekilde kullanacağız.

Örnek:

System.Console içinde yer alan

konsol fonksiyonumuz için bir delege tanımlayalım ve bu fonksiyonu çağırmak için tanımlayacağımız delegeyi kullanalım.

Başta kafa karıştırıcı gelebilir. var a = Console.WriteLine gibi bir atama yapmamız mümkün değilken Console.WriteLine fonksiyonunu bir değişkene atayabiliyoruz.

Bir fonksiyonu, bir delegeye atayabilmek için parametre ve dönüş tiplerinin örtüşmesi gereklidir.

Console.WriteLine fonksiyonunun birden fazla overload türü olduğu için derleyici bizim yerimize uygun olanı seçti.

Action, Func Delege Türleri ve Türevleri

Action, Func, Func<T1, ...>, Action<T1, ...> şeklindeki delegeler, yukarıda Writer şeklinde yaptığımız tanımdan hiçbir farkı olmayan, .NET ile beraber gelen delege türleridir.

Action ve Func arasındaki tek ve önemli fark, Action adındaki delegelerin void tipi dönen fonksiyonları temsil edebilmesidir.

Kendi frameworkünüzü yazmak veya CLR kullanmadan uygulama geliştirmek gibi özel sebepleriniz yoksa Func ve Action türlerindeki delegeleri kullanmalısınız.

Güncelleme Microsoft da bizimle aynı fikirdeymiş ve kendi delege türlerinizi yazmanızı tavsiye etmiyormuş.

✔️ DO use the new Func<...>, Action<...>, or Expression<...> types instead of custom delegates, when defining APIs with callbacks.

Fonksiyon Döndüren Fonksiyon

Yukarıda yaptığımız örneği bir adım ileri götürelim:

WriterFactory fonksiyonundan Console.WriteLine fonksiyonunu döndürdük.

Sonuç

Örneğimizde bir WriterFactory fonksiyonundan void Write(string message) delegesine uyumlu bir fonksiyon döndürerek aynı zamanda bir soyutlama yapmış olduk.

Bir sonraki fonksiyonel programlama yazımız, delegelerde jenerik türlerin kullanımı üzerine olabilir. Daha sonra ise kala iki madde hakkında kısa ve öğretici uygulamalar yapmayı planlıyoruz.

writer1 ve writer2 delegeleri C:\fn.log dosyasına ekleme yapacak şekilde WriterFactory fonksiyonunu güncelleyin.

Originally published at https://blog.guneysu.xyz.

--

--