İçeriğe geç

Lambda Expression Nedir, Nasıl Kullanılır?

Eğer benim gibi önceki projelerinizde nodejs ile çalıştıysanız aslında bu ifadenin Arrow Function’lara benzediğini düşünebilirsiniz ve evet syntax olarak çok benzemektedir. Bundan dolayı bu konuyu öğrenirken motivasyonlu bir şekilde başlamıştım. Bu yazımda Lambda ifadelerini elimden geldiğince anlatmayı deneyeceğim. İyi okumalar…

Öncelikle Lambda ifadelerinin anonim birer fonksiyonlar (metot değil!!!) olduğunu bilmemiz gerekiyor. Peki anonim fonksiyon da ne demek? Bu yapıların bir ismi yoktur diyerek kısa bir cevap vereceğim şimdilik. Bu sayede kod yazarken bize kolaylık sağlamaktadırlar. Şimdi bunu bir örnek üzerinde görelim.

Senaryomuzda bir veritabanına bağlanıp Mr Robot dizisinin 5. Sezon bölümlerinin puanlarını bir koşuldan geçirerek işlem yaptığımızı düşünelim. Puanı 9’dan büyük olan bölümler ekrana bastıralım. Eğer Lambda Expression kullanmasaydık bu işlemi nasıl yapardık?

Burada bir veritabanı oluşturmaktan ziyade model üzerine Repository’de verileri ekleyerek çekme işlemini tercih ettim.

namespace LamdaFonksiyonu.Models
{
    public class MrRobot
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public float Score { get; set; }
    }
}

Model yapısı yukarıdaki gibidir. Repository kısmı aşağıda verilmiştir.

using LamdaFonksiyonu.Models;
using System.Collections.Generic;

namespace LamdaFonksiyonu
{
    public class MrRobotRepository
    {
        public List<MrRobot> GetEpisodes()
        {
            return new List<MrRobot>
            {
                new MrRobot(){ID=1, Title="401 Unauthorized", Score=9.5f},
                new MrRobot(){ID=2, Title="402 Payment Required", Score=8.9f},
                new MrRobot(){ID=3, Title="403 Forbidden", Score=8.8f},
                new MrRobot(){ID=4, Title="404 Not Found", Score=8.8f},
                new MrRobot(){ID=5, Title="405 Method Not Allowed", Score=9.8f},
                new MrRobot(){ID=6, Title="406 Not Acceptable", Score=9.2f},
                new MrRobot(){ID=7, Title="407 Proxy Authentication Required", Score=10f},
            };
        }
    }
}

Ve Program.cs ise aşağıdaki gibidir.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LamdaFonksiyonu.Models;

namespace LamdaFonksiyonu
{
    class Program
    {
        static void Main(string[] args)
        {
            var MrRobotEpisodes = new MrRobotRepository().GetEpisodes();
            var episodes = MrRobotEpisodes.FindAll(GreaterThan9);
            foreach (var episode in episodes)
            {
                Console.WriteLine("Bölüm Adı: {0}, Puanı: {1}",episode.Title, episode.Score);
            }
        }
        private static bool GreaterThan9(MrRobot obj)
        {
            return obj.Score > 9f;
        }
    }
}

Programın çıktısı:

Bölüm Adı: 401 Unauthorized, Puanı: 9,5
Bölüm Adı: 405 Method Not Allowed, Puanı: 9,8
Bölüm Adı: 406 Not Acceptable, Puanı: 9,2
Bölüm Adı: 407 Proxy Authentication Required, Puanı: 10

Press any key to continue . . .

Şimdi Lambda ifadelerini kullanarak bu işlemi yapmayı deneyelim.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LamdaFonksiyonu.Models;

namespace LamdaFonksiyonu
{
    class Program
    {
        static void Main(string[] args)
        {
            var MrRobotEpisodes = new MrRobotRepository().GetEpisodes();
            var episodes = MrRobotEpisodes.FindAll(x => x.Score > 9f);
            foreach (var episode in episodes)
            {
                Console.WriteLine("Bölüm Adı: {0}, Puanı: {1}",episode.Title, episode.Score);
            }
        }
    }
}

Görüldüğü üzere sadece var episodes = MrRobotEpisodes.FindAll(x => x.Score > 9f); kodunu yazdık. Lambda fonksiyonları yazarken kullanmış olduğumuz yapı parametre ve bool dönecek ifadeden oluşmaktadır. Sol taraftaki x burada parametremiz ve => ifadesinin sağındaki ise gerekli şartlar sağlandığında true dönecek yapımız. Görüldüğü üzere bir fonksiyon ismimiz yok ve tek satırda bu işlemimizi tamamladık. Projelerimizde kolaylık sağladığından dolayı servislerimizde çokça kullanabileceğimiz bir yapı. Umarım anlaşılmıştır. Diğer yazılarda görüşmek üzere…

 

Kategori:C Sharp

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir