Lambda ifodalari misollar bilan. Yuqori darajadagi funktsiyalar va lambdalar


Download 37.33 Kb.
bet3/17
Sana25.10.2023
Hajmi37.33 Kb.
#1720034
1   2   3   4   5   6   7   8   9   ...   17
Bog'liq
Lambda ifodalari misollar bilan

Kechiktirilgan ijro
Lambdalardan foydalanishning asosiy nuqtalaridan biri kechiktirilgan ijrodir. Ya'ni, biz dasturning bir joyida lambda ifodasini aniqlaymiz va keyin uni, agar kerak bo'lsa, dasturning turli qismlarida cheksiz ko'p marta chaqirishimiz mumkin. Kechiktirilgan ijro, masalan, quyidagi hollarda talab qilinishi mumkin:
Alohida ish zarrachasida ishlaydigan kod
Xuddi shu kodni bir necha marta ishlatish
Ba'zi hodisa natijasida kodni bajarish
Kodni faqat kerak bo'lganda va kerak bo'lganda bajaring
Parametrlarni Lambda ifodasiga o'tkazish
Lambda ifoda parametrlari funktsional interfeysdagi usul parametrlari turiga mos kelishi kerak. Lambda ifodasini yozishda parametr turini yozish shart emas, garchi printsipial jihatdan buni amalga oshirish mumkin, masalan:
Operatsiya = (int x, int y)->x+y;
Agar usul hech qanday parametrlarni olmasa, bo'sh qavslar yoziladi, masalan:
()-> 30 + 20;
Agar usul faqat bitta parametrni olsa, u holda qavslar olib tashlanishi mumkin:
N->n*n;
Terminal lambda ifodalari
Yuqorida biz ma'lum bir qiymatni qaytaradigan lambda ifodalarini ko'rib chiqdik. Lekin hech qanday qiymat qaytarmaydigan terminal lambdalar ham bo'lishi mumkin. Masalan:
Interfeys Printable( void print(String s); ) public class LambdaApp ( public static void main(String args) ( Chop etish uchun printer = s->System.out.println(s); printer.print("Salom Java!"); ))
Lambdalar va mahalliy o'zgaruvchilar
Lambda ifodasi tashqarida umumiyroq doirada - lambda ifodasi aniqlangan sinf yoki usul darajasida e'lon qilingan o'zgaruvchilardan foydalanishi mumkin. Biroq, o'zgaruvchilar qanday va qayerda aniqlanganiga qarab, ularni lambdalarda ishlatish usuli farq qilishi mumkin. Birinchi misolni ko'rib chiqing - sinf darajasidagi o'zgaruvchilardan foydalanish:
Umumiy klass LambdaApp ( static int x = 10; static int y = 20; public static void main(String args) ( Operation op = ()->( x=30; return x+y; ); System.out.println( op.calculate()); // 50 System.out.println(x); // 30 - x qiymati o'zgargan ) ) interfeysi Operation( int account(); )
X va y o'zgaruvchilar sinf darajasida e'lon qilinadi va lambda ifodasida biz ularni olishimiz va hatto o'zgartirishimiz mumkin. Demak, bu holda ifoda bajarilgandan keyin x o'zgaruvchining qiymati o'zgaradi.
Endi boshqa misolni ko'rib chiqing - usul darajasida mahalliy o'zgaruvchilar:
Umumiy statik void main(String args) ( int n=70; int m=30; Operation op = ()->( //n=100; - buni qila olmaysiz m+n; ); // n =100; - bu ham mumkin emas System.out.println(op.calculate()); // 100 )
Biz lambdalarda metod darajasidagi mahalliy oʻzgaruvchilardan ham foydalanishimiz mumkin, lekin endi ularning qiymatini oʻzgartira olmaymiz. Agar biz buni qilishga harakat qilsak, ishlab chiqish muhiti (Netbeans) bizga xato berishi mumkin va bunday o'zgaruvchi final kalit so'zi bilan belgilanishi kerak, ya'ni konstanta qilingan: final int n=70; . Biroq, bu ixtiyoriy.
Bundan tashqari, biz ushbu ifodadan tashqarida lambda ifodasida ishlatiladigan o'zgaruvchining qiymatini o'zgartira olmaymiz. Ya'ni, bunday o'zgaruvchi doimiy deb e'lon qilinmasa ham, aslida u doimiydir.

Download 37.33 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   17




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