Lambda ifodalari misollar bilan. Yuqori darajadagi funktsiyalar va lambdalar


Qabul qiluvchi ob'ekt bilan funktsiya literallari


Download 37.33 Kb.
bet12/17
Sana25.10.2023
Hajmi37.33 Kb.
#1720034
1   ...   9   10   11   12   13   14   15   16   17
Bog'liq
Lambda ifodalari misollar bilan

Qabul qiluvchi ob'ekt bilan funktsiya literallari
Kotlin belgilangan qabul qiluvchi ob'ekt bilan funktsiyani literal deb chaqirish imkoniyatini beradi. Literalning tanasi ichida siz qabul qiluvchi ob'ektdagi usullarni qo'shimcha kvalifikatsiyalarsiz chaqirishingiz mumkin. Bu funksiya tanasi ichidagi qabul qiluvchi ob'ekt a'zolariga kirish imkonini beruvchi kengaytmalar qanday ishlashiga o'xshaydi. Qabul qiluvchi obyekt bilan literallardan foydalanishning eng muhim misollaridan biri bu Type-safe Groovy uslubidagi quruvchilardir.
Bunday literalning turi qabul qiluvchi bilan funksiyaning turi:
Yig'indi: Int.(boshqa: Int) -> Int
Kengaytmalarga o'xshab, funktsiya literalini qabul qiluvchi ob'ektdagi usul kabi chaqirish mumkin:
1.sum(2)
Anonim funksiya sintaksisi qabul qiluvchi turini aniq belgilash imkonini beradi. Keyinchalik foydalanish uchun funksiyamiz turidagi o'zgaruvchini e'lon qilishingiz kerak bo'lsa, bu foydali bo'lishi mumkin.
Val summasi = qiziqarli Int.(boshqa: Int): Int = bu + boshqa
Qabul qiluvchining turini kontekstdan aniqlash mumkin bo'lganda, Lambda ifodalari qabul qiluvchi bilan funksiya literallari sifatida ishlatilishi mumkin.
Class HTML ( fun body() ( ... ) ) qiziqarli html(init: HTML.() -> Unit): HTML ( val html = HTML() // qabul qiluvchi obyektni yaratish html.init() // o‘tish qabul qiluvchidan lambdaga qaytish html ) html ( // qabul qiluvchi bilan lambda shu yerda boshlanadi body() // chaqiruv qabul qiluvchisi obyekti usuli )
Java dastlab butunlay ob'ektga yo'naltirilgan tildir. Ibtidoiy turlardan tashqari, Java-da hamma narsa ob'ektdir. Hatto massivlar ham ob'ektlardir. Har bir sinfning misollari ob'ektlardir. Alohida aniqlashning hech qanday usuli yo'q (sinfdan tashqari - taxminan. tarjima.) ba'zi funktsiyalar. Va usulni argument sifatida o'tkazish yoki boshqa usul natijasida usul tanasini qaytarishning hech qanday usuli yo'q. Xuddi shunday. Ammo bu Java 8 dan oldin edi.

Qadimgi Swing-dan beri, ba'zi funksiyalarni ba'zi usullarga o'tkazish kerak bo'lganda, siz anonim sinflarni yozishingiz kerak edi. Misol uchun, hodisa ishlov beruvchisini qo'shish quyidagicha ko'rinadi:


someObject.addMouseListener(new MouseAdapter() ( public void mouseClicked(MouseEvent e) ( //Voqealar tinglovchisini amalga oshirish shu yerda... ) ));
Bu erda biz sichqoncha hodisasi tinglovchisiga ba'zi kod qo'shmoqchimiz. Biz anonim MouseAdapter sinfini aniqladik va darhol undan ob'ekt yaratdik. Shunday qilib, biz addMouseListener usuliga qo'shimcha funksiyalarni o'tkazdik.
Xulosa qilib aytganda, oddiy usulni (funksionallikni) Java ga argumentlar orqali o‘tkazish oson emas. Ushbu cheklov Java 8 dasturchilarini til spetsifikatsiyasiga Lambda ifodalari deb nomlangan xususiyatni qo'shishga majbur qildi.

Download 37.33 Kb.

Do'stlaringiz bilan baham:
1   ...   9   10   11   12   13   14   15   16   17




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