• 13.6-rasm. Lyamda-ifoda va delegatning ishlashini solishtirish
  • Func
  • Nazorat uchun savollar : Lyamba haqida ma’lumot Lyambdaga oid misollar Delegat haqida ma’lumot
  • Lambda-ifodasining kelib chiqishi




    Download 1 Mb.
    bet9/9
    Sana13.02.2024
    Hajmi1 Mb.
    #156042
    1   2   3   4   5   6   7   8   9
    Bog'liq
    37-mavzu

    Lyambda ifodalar
    Bu delegatlar bilan ishlashda yozuvni qisqartirish usulidir. Quyidagi misol (13.6-listingni qaraymiz:


    13.6-listing
    using System;
    namespace app63_lambda1
    {
    internal class Program
    {
    public delegate int Ar(int x);
    public static int Add(int x)
    { return -x; }
    private static void Main()
    {
    Console.WriteLine("Oddiy delegate va lyamda-ifoda misoli\n");
    // Delegatning nusxasini yaratish
    Ar b = new Ar(Add);
    // Ar d = x => -x; 
    // Lyamda ifodani biz yozishimizmumkin bo’ladi, va demak, delegate orqali

    Func d = x => -x; // Lyamda-ifoda


    // Lyambda-ifoda va delegatdan foydalanish bilan Add() metodini chaqirish
    Console.WriteLine("Delegat metodni chaqirish natijasi: {0}", b(2));
    Console.WriteLine("L-ifodani metodini chaqirish natijasi: {0}", d(2));
    Console.Read();
    }
    }
    }



    13.6-rasm. Lyamda-ifoda va delegatning ishlashini solishtirish
    Rasmdan ko’rinib turibdiki, natija oddiy sintaksis hisoblangan lyambda-ifoda ko’rinishida yozilganda ham bir xil. Bu misolda oddiy anonim metod ko’rsatilgan bo’lib, u o’ziga xos usulda ifoda bilan yozilgan:

    Func d = x => -x;


    x => -x; - // bu yerda lyambda-ifodadir.
    Bu “parametr sifatida x ni oladi va x ga quyidagi amallar natijasini qaytaradi” kabi o’qiladi. Amallar natijasi bu – (-x). Faktik jihatdan –x – bu anonim blokning operatorlaridan bittasidir. delegate kalit sozi o’rniga bu yerda Func qo’llanilgan (parametrlar ro’yxatini tiplashtirish tipi). Func<> - bu yangi yordamchi tip, qaytaruvchi natijani va to’rttagacha argumentni qabul qiladi. Undan oddiy delegatlar e’loni uchun foydalanishimiz mumkin va u System nomlar fazosida taqdim etiladi. Ushbu holatda d o’zgaruvchisi e’loni delegat bo’ladi, uning qabul qiluvci tipi int va qaytaruvchi tipi ham int bo’ladi. E’tibor bersak, lyambda-ifoda o’zgaruvchi haqidagi ma’lumotlardan mutlaqo foydalanmaydi. Kompilyator lyambda-ifodani d o’zgaruvchsiga ta’minlaganda, delegat uchun aniqlangan tiplar haqida ma’lumotlardan foydalanadi, ya’ni x ning qiymati int, uning qaytaruvchi qiymati ham int. Lyambda-ifodalarni biz delegatlar orqali to’g’ridan-to’g’ri yozishimiz mumkin bo’ladi:
    Ar d = x => -x;
    Yuqorida ko’rib chiqqan lyambda-ifodamizda bitta parametr mavjud(x). Lekin ularning soni bir qancha yoki umuman bo’lmasligi ham mumkin. Umuman olganda, lyambda-ifodaning ko’rinishi quyidagicha bo’ladi:

    (kiruvchi_parametrlar) => ifoda


    Agar lyambda-ifoda faqat bitta kiruvchi parametrga ega bo’lsa, qavslar qo’yilmaydi (buni misolimizda ko’rish mumkin), qolgan barcha holatlarda albatta qavslar bo’ladi. Ikki va undan ortiq parametrlar vergul bilan ajratiladi va oxirida qavs yopiladi. Masalan,
    (x, y) => x == y
    Ba’zida kompilyatorlar og’ir va hattoki, mumkin bo’lmagan kiruvchi tiplarni aniqlashi mumkin. Bu holatda tiplar quyidagi misolda ko’rsatilgani kabi oshkor ravishda korsatiladi:
    (int x, string s) => s.Length > x
    Kirish parametrlari mavjud bo’lmasa bo’sh qavslar orqali ko’rsatiladi:
    () => SomeMethod()

    Nazorat uchun savollar :

    1. Lyamba haqida ma’lumot

    2. Lyambdaga oid misollar

    3. Delegat haqida ma’lumot

    Download 1 Mb.
    1   2   3   4   5   6   7   8   9




    Download 1 Mb.