5-modul · 6-dars: Behavior Parameterization · Lambda
Daraja: O'rta
Behavior Parameterization · Lambda. Java kutubxonalari va Stream bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Behavior Parameterization · Lambda tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Metodga ma'lumot emas, xatti-harakat (kod/funksiya) ni parametr sifatida uzatish — turli mantiqni bir metodga moslashuvchan berish.
Takroriy, o'xshash kodni (har xil filtr uchun alohida metod yozish kabi) bartaraf etadi; kodni moslashuvchan va o'zgarishga chidamli qiladi.
## Intervyuga tayyorgarlik ### Behaviour parametrization nima? Metodga ma'lumot emas, xatti-harakat (kod/funksiya) ni parametr sifatida uzatish — turli mantiqni bir metodga moslashuvchan berish.
### Behaviour parametrization qanday muammolarni hal qiladi? Takroriy, o'xshash kodni (har xil filtr uchun alohida metod yozish kabi) bartaraf etadi; kodni moslashuvchan va o'zgarishga chidamli qiladi.
### Lambda expression nima? Nomsiz (anonim) funksiya — `(parametrlar) -> tana` ko'rinishida qisqa yoziladi; functional interface ni amalga oshiradi.
### Lambda expression larda qanday qoidalar mavjud? Faqat functional (bitta abstract methodli) interface uchun ishlaydi; parametr turlari yozilmasligi mumkin (inference); bitta ifoda bo'lsa `{}` va `return` shart emas; tashqi o'zgaruvchilar effectively final bo'lishi kerak.
### Final va Effectively final o'zgaruvchilar farqi? `final` — aniq final deb e'lon qilingan. Effectively final — `final` yozilmagan, lekin bir marta qiymat berilib keyin o'zgartirilmagan o'zgaruvchi. Lambda ikkalasini ham ishlata oladi.
### Qayerlarda Lambda-ni ishlatgan to'g'ri bo'ladi? Functional interface kutilgan joyda: collection amallari (`forEach`, `filter`, `map`), Comparator, event handler, `Runnable` va qisqa bir martalik xatti-harakatlarda.
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
Manbadagi 17 dars oldingi o‘quv arxividagi 10 guruhga birlashtirilgan: Lombok/Faker va Stream/Collectors hamda HttpClient/Gson/Reflection/Annotations birgalikda o‘rganiladi.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/5-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
var names = new java.util.ArrayList<>(java.util.List.of("Ali", "Vali", "Aziz"));
names.removeIf(name -> name.startsWith("A"));
System.out.println(names); // [Vali]
Keng tarqalgan xatolar
- Lambda ichida tashqi o'zgaruvchini o'zgartirmoqchi bo'lish - u effectively final bo'lishi shart.
- Uzun mantiqni bitta lambda ichiga siqish - alohida metodga chiqarilsa o'qish osonlashadi.
Mashqlar
- Bir xil filtrlashni anonim class va lambda bilan yozib solishtiring.
- Xatti-harakatni parametr qilib qabul qiladigan metod yozing.
Teglar: nazariya, pdp, modul-05