Mavzu: Lyambda-ifodalar. Reja



Download 71,5 Kb.
bet3/4
Sana18.02.2022
Hajmi71,5 Kb.
#451607
1   2   3   4
Bog'liq
5. Lyambda-ifodalar

3. Birlik lyambda-ifodalar
Bitta lyambda-ifoda qismi = > operator o'ng tomonida joylashgan, chap tomonida ko'rsatilgan parametr(yoki parametrlar bir qator)ga ta'sir qiladi. Bunday ifodani hisoblash natijasi lambda operatorining natijasi hisoblanadi.
Quyida bitta parametr qabul qiluvchi birlik lyambda-ifodasining umumiy shakli keltirilgan.
parametr = > ifoda
Agar siz bir nechta parametrlarni ko'rsatmoqchi bo'lsangiz, quyidagi shakl ishlatiladi.
(parametrlar_ro_yxati) => ifoda
Shunday qilib, ikkita yoki undan ko'p parametrlarni belgilash zarur bo'lganda, ular qavslar ichida yozilishi kerak. Agar ifoda parametrlarni talab qilmasa, bo'sh qavslardan foydalaniladi.
Quyida birlik lyambda-ifodasiga oddiy misol.
count => count + 2
Ushbu ifodada count parametri count + 2 ifodasi bilan ishlayotgan parametr sifatida xizmat qiladi. Natijada, count parametrining qiymati 2 ga oshadi. Bu yerda birlik lyambda-ifodasiga yana bir misol.
n => n % 2 == 0
Bunday holda, n parametrining qiymati juft bo`lsa true, aks holda false mantiqiy qiymatni qaytaradi.
Lyambda-ifodasi ikki bosqichda qo'llaniladi. Birinchi, lyambda-ifodasi bilan mos keladigan delegat tipini e`lon qilishda, keyin lyambda-ifodasi belgilangan delegatning nusxasi e'lon qilinadi. Shundan so'ng, lyambda-ifodasi delegatga murojaat qilganda hisoblab chiqiladi. Uning hisoblash natijasi qaytarish qiymati bo'ladi.
Quyidagi misol dasturi ikkita birlik lyambda-ifodasini qo'llashni namoyish etadi. Birinchidan, ushbu dasturda ikki tipdagi delegatlar e'lon qilinadi. Birinchisi, Incr, int tipda argument qabul qiladi va shu tipda natija qaytaradi. Ikkinchi delegat, IsEven, int tipida argument qabul qiladi, ammo bool tipida natija qaytaradi. Keyin bu delegatlarning nusxalari birlik lyambda-ifodalar bilan belgilanadi. Oxirida, lyambda-ifodalar delegatlarning tegishli nusxalari yordamida hisoblab chiqiladi.
// Ikkita birlik lyambda-ifodaning qo'llanilishi.
using System;
//int tipida argument qabul qiluvchi va int tipida natija
//qaytaradigan delegatni e'lon qilish.
delegate int Incr(int v) ;
//int tipida argument qabul qiluvchi va bool tipida natija
//qaytaradigan delegatni e'lon qilish.
delegate bool IsEven(int v) ;
class SimpleLambdaDemo {
static void Main() {
//Yaratilgan Incr delegati lyambda-ifodaga murojaat qilib
//parametri qiymatini 2ga oshiradi.
Incr incr = count => count + 2;
// Endi incr lyambda-ifodasini ishlatish.
Console.WriteLine("Использование лямбда-выражения incr: ");
int x = -10;
while(x <= 0) {
Console.Write(x + " ");
x = incr(x); // x qiymatini 2 ga oshirish
}
Console.WriteLine("\n");
// Lyambda-ifodaga murojaat qiluvchi parametri qiymati juft bo`lsa true, aks holda //false mantiqiy qiymat qaytaruvchi IsEven delegati nusxasini yaratish
IsEven isEven = n => n % 2 == 0;
// Endi isEven lyambda-ifodasini ishlatish.
Console.WriteLine("Использование лямбда-выражения isEven: ");
for(int i=l; i <= 10; i++)
if(isEven(i)) Console.WriteLine(i + " четное.");
}
}
Bu dasturning bajarilishi natijasi.
Использование лямбда-выражения incr:
-10 -8 -6 -4 -2 0

Использование лямбда-выражения isEven:
2 четное.
4 четное.
6 четное.
8 четное.
10 четное.
Ushbu dasturdagi e`lon satrlariga alohida e'tibor bering.
Incr incr = count => count +2;
IsEven isEven = n => n % 2 == 0;
E'lonning birinchi satrida incr delegatining nusxasi birlik lyambda-ifodasi bilan belgilangan, natijada count parametrining qiymati 2 ga oshirilib qaytariladi. Ushbu ifodani Incr delegatiga o`zlashtirish mumkin, chunki u ushbu delegatning e'loniga mos keladi. Incr delegatining nusxasiga murojaat qilinganda ko'rsatilgan argumentga lyambda-ifodani hisoblash natijasini qaytarish count parametri orqali uzatiladi. E'lonning ikkinchi satrida isEven delegati parametri qiymati juft bo`lsa true, aks holda false mantiqiy qiymat qaytariladi. Shunday qilib, bu lyambda-ifoda IsEven delegatining e'loniga mos keladi.
Yuqoridagilarga asosan, o`rinli savol tug'iladi: lyambda-ifodada ishlatiladigan ma'lumotlar tipi komplyatorga qanday ma'lum bo'ladi, misol uchun, incr delegatining nusxasiga tayinlangan lyambda-ifodadagi count parametrning int tipi haqidagi ma`lumot? Bu savolga shunday javob berish mumkin: komplyator parametr tipi va delegat tipiga ko'ra ifodani hisoblash natijasining tipi haqida xulosa chiqaradi. Shuning uchun lyambda-ifodalarining parametrlari va qaytariladigan qiymati delegatning parametrlari va qaytariladigan qiymati bilan mos bo'lishi kerak.
Ma'lumotlar tipi bo'yicha mantiqiy xulosaning barcha afzalligiga qaramasdan, ayrim hollarda lyambda-ifodasi parametrining tipini aniq ko'rsatish kerak. Buning uchun ma'lumot tipi uchun ma'lum bir nomni kiritish kifoya. Misol sifatida, incr delegatni e'lon qilishning yana bir usuli.
Incr incr = (int count) => count + 2;
Ko'rib turganingizdek, count endi aniq int tipli parametr sifatida e'lon qilinadi. Qavslardan foydalanishga ham e'tibor bering. Endi ular kerak. (Qavslarni faqat bitta parametr o'rnatilganda va uning tipi aniq ko'rsatilmaganda bekor qilinishi mumkin.) Avvalgi misolda lyambda-ifodalarida bitta parametr ishlatilgan, umuman olganda, lyambda-ifodalari har qanday parametrga ega bo'lishi mumkin, shu jumladan nolta ham. Lyambda-ifodada bir nechta parametrlardan foydalanilsasa, ular qavslar ichida yozilishi kerak. Quyida qiymat bilan chegaragan sohani aniqlash uchun lyambda-ifodani ishlatish misoli keltirilgan.
(low, high, val) => val >= low && val <= high;
Bu lyambda-ifoda bilan mos keladigan delegatning tipi quyidagicha e'lon qilinadi.
delegate bool InRange(int lower, int upper, int v);
Shunday qilib, InRange delegatining nusxasi quyidagicha yaratilishi mumkin.
InRange rangeOK = (low, high, val) => val >= low && val <= high;
Shundan so'ng, birlik lyambda-ifodasi quyida ko'rsatilganidek ishlatilishi mumkin.
if(rangeOK(l, 5, 3)) Console.WriteLine("Число 3 находится в пределах от 1 до 5.");
Oxirgi eslatma: tashqi o'zgaruvchilar lyambda-ifodalarda ham anonim metodlarda bo'lgani kabi ishlatilishi va olinishi mumkin.

Download 71,5 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish