📚 Java'da Compound Assignment Operatorlari 📚
🖇 Java’da oddiy = operatoridan tashqari, birikma tayinlash operatorlari ham mavjud bo'lib, ular arifmetik yoki mantiqiy amallarni bajarish bilan birga natijani o'zgartiruvchi o‘zgaruvchiga saqlash imkonini beradi. Odatda, bu operatorlar kodni qisqartirish va qulay qilish uchun ishlatiladi.
💡 Misollar va Izohlar:
Qo'shish :
O'ng tomondagi qiymatni chap tomondagi o‘zgaruvchiga qo‘shadi va natijani o‘zgaruvchiga saqlaydi.
Ayirish :
O‘ng tomondagi qiymatni chap tomondan ayiradi va natijani saqlaydi.
Ko'paytirish :
Chap tomondagi qiymatni o‘ng tomondagi qiymatga ko‘paytiradi va natijani saqlaydi.
Bo'lish :
Chap tomondagi qiymatni o‘ng tomondagi qiymatga bo‘ladi va natijani saqlaydi.
🔍 Masalan:
Foydalari:
1. Kod qisqaradi: Birikma operatorlar kodni sodda va qisqa ko'rinishga keltiradi.
2.Kastingni osonlashtiradi: Agar turli turdagi (masalan, int va long) qiymatlar bilan ishlayotgan bo‘lsangiz, birikma operatorlari natijani avtomatik ravishda kasting qilishi mumkin.
🔍 Masalan:
Yuqoridagi qatorni to‘g‘irlash uchun (int) ko‘rinishida qo'lda kasting qilish kerak. Ammo birikma operator yordamida kodni osonroq yozish mumkin:
Bu yerda sheep avtomatik ravishda long turiga kasting qilinadi va natija int turiga qaytariladi. Shu sababli, *=, +=, va boshqa birikma operatorlari kodni soddalashtiradi va xatoliklardan himoya qiladi !
🖇 Java’da oddiy = operatoridan tashqari, birikma tayinlash operatorlari ham mavjud bo'lib, ular arifmetik yoki mantiqiy amallarni bajarish bilan birga natijani o'zgartiruvchi o‘zgaruvchiga saqlash imkonini beradi. Odatda, bu operatorlar kodni qisqartirish va qulay qilish uchun ishlatiladi.
💡 Misollar va Izohlar:
Qo'shish :
int a = 19;
a += 5;
O'ng tomondagi qiymatni chap tomondagi o‘zgaruvchiga qo‘shadi va natijani o‘zgaruvchiga saqlaydi.
Ayirish :
int b = 19;
b -= 2;
O‘ng tomondagi qiymatni chap tomondan ayiradi va natijani saqlaydi.
Ko'paytirish :
int c = 7;
c *= 9;
Chap tomondagi qiymatni o‘ng tomondagi qiymatga ko‘paytiradi va natijani saqlaydi.
Bo'lish :
int d = 18;
d /= 3;
Chap tomondagi qiymatni o‘ng tomondagi qiymatga bo‘ladi va natijani saqlaydi.
🔍 Masalan:
int camel = 2, giraffe = 3;
camel = camel * giraffe; // Oddiy tayinlash operatori bilan
camel *= giraffe; // Compound Assignment operatori bilan
Foydalari:
1. Kod qisqaradi: Birikma operatorlar kodni sodda va qisqa ko'rinishga keltiradi.
2.Kastingni osonlashtiradi: Agar turli turdagi (masalan, int va long) qiymatlar bilan ishlayotgan bo‘lsangiz, birikma operatorlari natijani avtomatik ravishda kasting qilishi mumkin.
🔍 Masalan:
long goat = 10;
int sheep = 5;
sheep = sheep * goat;
// Xato: int o'zgaruvchiga long qiymatni tayinlab bo'lmaydi
Yuqoridagi qatorni to‘g‘irlash uchun (int) ko‘rinishida qo'lda kasting qilish kerak. Ammo birikma operator yordamida kodni osonroq yozish mumkin:
long goat = 10;
int sheep = 5;
sheep *= goat; // Muammo hal qilindi!
Bu yerda sheep avtomatik ravishda long turiga kasting qilinadi va natija int turiga qaytariladi. Shu sababli, *=, +=, va boshqa birikma operatorlari kodni soddalashtiradi va xatoliklardan himoya qiladi !
🔥2👍1
"equals" vs "==" haqida qisqacha tushuncha 🎯
💡 Java dasturlash tilida ko‘pincha equals va ==
operatorlarining farqini tushunish muhimdir.
Quyida ularning asosiy farqlari
haqida tushuncha berib o‘tamiz:
📚 "==" operatori 🧠
🔸 Ma’nosi: Bu operator obyektlarning xotira
manzilini (reference) solishtiradi. 🗂
🔸 Ishlash prinsipi: Agar ikki obyekt bir xil xotira
manziliga ega bo‘lsa, == true qaytaradi. ✔️
📌 Natija: Xotira manzillari bir xil bo‘lganda true.
📚 "equals" metodi 📏
🔸 Ma’nosi: Bu obyektlarning qiymatini (value)
solishtiradi. 🧩
🔸 Ishlash prinsipi: Agar ikki obyekt bir xil
qiymatga ega bo‘lsa, equals true qaytaradi. ✔️
📌 Natija: Qiymatlar bir xil bo‘lsa, true, lekin
xotira manzillari farqli bo‘lgani uchun == false.
❓Qachon "equals", qachon "==" ishlatiladi? 🤔
"==" operatori:
🔸 Primitiiv turlar (int, char, boolean, va hokazo)
yoki obyektlarning xotira manzillarini
solishtirish kerak bo‘lganda ishlatiladi.
"equals" metodi:
🔸 Obyektlarning qiymatlarini solishtirishda ishlatiladi
(masalan, String, Integer va boshqa obyektlar).
🚨 Esda tuting !
Agar equals metodini foydalanuvchi o‘zi yozsa,
obyektning qiymatini solishtirishga
moslashtirish mumkin:
🔑 Xulosa:
✅ Primitiiv turlar uchun har doim "==" dan foydalaning.
✅ Obyektlar uchun esa "equals" metodini ishlating.
💡 Kod yozib mashq qiling va bilimlaringizni mustahkamlang! 💻
🎉 Tushungan bo‘lsangiz, 👍 bosing va do‘stlaringiz bilan ulashing! 😊
Kanalni kuzatib boring:
t.me/strong_java
💡 Java dasturlash tilida ko‘pincha equals va ==
operatorlarining farqini tushunish muhimdir.
Quyida ularning asosiy farqlari
haqida tushuncha berib o‘tamiz:
📚 "==" operatori 🧠
🔸 Ma’nosi: Bu operator obyektlarning xotira
manzilini (reference) solishtiradi. 🗂
🔸 Ishlash prinsipi: Agar ikki obyekt bir xil xotira
manziliga ega bo‘lsa, == true qaytaradi. ✔️
String a = "salom";
String b = "salom";
System.out.println(a == b);
//true (agar String pool ishlatilsa)
📌 Natija: Xotira manzillari bir xil bo‘lganda true.
📚 "equals" metodi 📏
🔸 Ma’nosi: Bu obyektlarning qiymatini (value)
solishtiradi. 🧩
🔸 Ishlash prinsipi: Agar ikki obyekt bir xil
qiymatga ega bo‘lsa, equals true qaytaradi. ✔️
String a = new String("salom");
String b = new String("salom");
System.out.println(a.equals(b)); // true
System.out.println(a == b); // false📌 Natija: Qiymatlar bir xil bo‘lsa, true, lekin
xotira manzillari farqli bo‘lgani uchun == false.
❓Qachon "equals", qachon "==" ishlatiladi? 🤔
"==" operatori:
🔸 Primitiiv turlar (int, char, boolean, va hokazo)
yoki obyektlarning xotira manzillarini
solishtirish kerak bo‘lganda ishlatiladi.
"equals" metodi:
🔸 Obyektlarning qiymatlarini solishtirishda ishlatiladi
(masalan, String, Integer va boshqa obyektlar).
🚨 Esda tuting !
Agar equals metodini foydalanuvchi o‘zi yozsa,
obyektning qiymatini solishtirishga
moslashtirish mumkin:
🔑 Xulosa:
✅ Primitiiv turlar uchun har doim "==" dan foydalaning.
✅ Obyektlar uchun esa "equals" metodini ishlating.
💡 Kod yozib mashq qiling va bilimlaringizni mustahkamlang! 💻
🎉 Tushungan bo‘lsangiz, 👍 bosing va do‘stlaringiz bilan ulashing! 😊
Kanalni kuzatib boring:
t.me/strong_java
Telegram
Learning Java Uz 🇺🇿
Bu kanal Java dasturlash tilini o'rganuvchilar uchun
Kanalga asosan Java va Spring frameworkiga oid bilimlar joylanib boriladi
Kanalga asosan Java va Spring frameworkiga oid bilimlar joylanib boriladi
👍2🔥2⚡1🤯1
Spring Core asoslari
Spring Core – Spring Frameworkning yuragi. Bu yerda DI va IoC asosiy tushunchalar.
📌 Bilishingiz kerak bo‘lgan mavzular:
▶️ 1. IoC (Inversion of Control) va DI (Dependency Injection)
Bean nima?
Spring konteyner nima?
Constructor-based DI
Setter-based DI
Field-based DI (kam ishlatiladi, lekin bilish kerak)
@Component, @Service, @Repository, @Controller annotatsiyalari
@Autowired, @Qualifier, @Primary annotatsiyalari
▶️ 2. ApplicationContext vs BeanFactory
ApplicationContext qanday ishlaydi
Bean lifecycle: init – destroy
@PostConstruct, @PreDestroy
▶️ 3. Configuration
@Configuration, @Bean
Java-based konfiguratsiya
XML konfiguratsiyaga qisqacha nazar (ko‘p ishlatilmaydi, lekin tushunchasi kerak)
▶️ 4. Scope
Singleton, Prototype, Request, Session scope farqlari
▶️ 5. Profiles
@Profile annotatsiyasi yordamida muhitga qarab konfiguratsiya qilish
Kanalni kuzatib boring:
t.me/strong_java
Spring Core – Spring Frameworkning yuragi. Bu yerda DI va IoC asosiy tushunchalar.
📌 Bilishingiz kerak bo‘lgan mavzular:
Bean nima?
Spring konteyner nima?
Constructor-based DI
Setter-based DI
Field-based DI (kam ishlatiladi, lekin bilish kerak)
@Component, @Service, @Repository, @Controller annotatsiyalari
@Autowired, @Qualifier, @Primary annotatsiyalari
ApplicationContext qanday ishlaydi
Bean lifecycle: init – destroy
@PostConstruct, @PreDestroy
@Configuration, @Bean
Java-based konfiguratsiya
XML konfiguratsiyaga qisqacha nazar (ko‘p ishlatilmaydi, lekin tushunchasi kerak)
Singleton, Prototype, Request, Session scope farqlari
@Profile annotatsiyasi yordamida muhitga qarab konfiguratsiya qilish
Kanalni kuzatib boring:
t.me/strong_java
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Learning Java Uz 🇺🇿
Bu kanal Java dasturlash tilini o'rganuvchilar uchun
Kanalga asosan Java va Spring frameworkiga oid bilimlar joylanib boriladi
Kanalga asosan Java va Spring frameworkiga oid bilimlar joylanib boriladi
Please open Telegram to view this post
VIEW IN TELEGRAM
#minio #file_server
Minio local serverni o'rnatish
1. Minioning community edition server faylini yuklab oling
2. Bu faylni
3. Keyin quyidagi buyruqni bajaring :
4. MinIO lokal server sifatida ishga tushadi
5. Web interfeysga kirish: http://localhost:9000
6. Login:
Access Key: *****
Secret Key: ******
@strong_java
Minio local serverni o'rnatish
1. Minioning community edition server faylini yuklab oling
2. Bu faylni
C:\minio papkasiga saqlang3. Keyin quyidagi buyruqni bajaring :
cd C:\minio
.\minio.exe server C:\minio-data
4. MinIO lokal server sifatida ishga tushadi
5. Web interfeysga kirish: http://localhost:9000
6. Login:
Access Key: *****
Secret Key: ******
@strong_java
❤2
Java’ning "Write Once, Run Anywhere" tamoyilining sababi:
Java Virtual Machine (JVM):
1.Java dasturlari to‘g‘ridan-to‘g‘ri kompyuterning operatsion tizimida emas, balki Java Virtual Machine (JVM) deb ataladigan virtual mashinada ishlaydi. Siz Java kodini yozganingizda, u .java faylidan .class fayliga (bytecode) kompilyatsiya qilinadi. Bu bytecode platformadan mustaqil bo‘lib, har qanday operatsion tizimda (Windows, Linux, macOS) yoki qurilmada JVM bo‘lsa, ishlay oladi.
Bytecode va platforma mustaqilligi:
2.Java’da yozilgan kod bir marta kompilyatsiya qilinganda, hosil bo‘lgan bytecode har xil qurilmalar va operatsion tizimlarda bir xil tarzda ishlaydi. JVM har bir platforma uchun o‘ziga xos bo‘lib, bytecode’ni o‘sha platformaga moslashtirib, dasturni ishga tushiradi. Bu shuni anglatadiki, dasturchi har bir operatsion tizim uchun alohida kod yozishi shart emas.
Standart kutubxonalar:
3.Java’ning standart kutubxonalari (Java Standard Edition – Java SE) har qanday platformada bir xil ishlaydi. Bu dasturlarni turli muhitlarda sinovdan o‘tkazmasdan ishlatish imkonini beradi.
Java Virtual Machine (JVM):
1.Java dasturlari to‘g‘ridan-to‘g‘ri kompyuterning operatsion tizimida emas, balki Java Virtual Machine (JVM) deb ataladigan virtual mashinada ishlaydi. Siz Java kodini yozganingizda, u .java faylidan .class fayliga (bytecode) kompilyatsiya qilinadi. Bu bytecode platformadan mustaqil bo‘lib, har qanday operatsion tizimda (Windows, Linux, macOS) yoki qurilmada JVM bo‘lsa, ishlay oladi.
Bytecode va platforma mustaqilligi:
2.Java’da yozilgan kod bir marta kompilyatsiya qilinganda, hosil bo‘lgan bytecode har xil qurilmalar va operatsion tizimlarda bir xil tarzda ishlaydi. JVM har bir platforma uchun o‘ziga xos bo‘lib, bytecode’ni o‘sha platformaga moslashtirib, dasturni ishga tushiradi. Bu shuni anglatadiki, dasturchi har bir operatsion tizim uchun alohida kod yozishi shart emas.
Standart kutubxonalar:
3.Java’ning standart kutubxonalari (Java Standard Edition – Java SE) har qanday platformada bir xil ishlaydi. Bu dasturlarni turli muhitlarda sinovdan o‘tkazmasdan ishlatish imkonini beradi.
🔥1
⚡️ Functional Interface bo‘yicha intervyu savollar va javoblar
1. Functional interface nima?
👉 Functional interface — bu faqat bitta abstract method’ga ega bo‘lgan interface. U lambda expression yoki method reference bilan ishlash imkonini beradi.
2. Functional interface’da nechta method bo‘lishi mumkin?
👉 Faqat bitta abstract method bo‘lishi shart.
Lekin bir nechta default va static methodlar bo‘lishi mumkin.
3. Functional interface misol keltiring.
@FunctionalInterface
public interface Calculator {
int calculate(int a, int b);
}
4. @FunctionalInterface annotatsiyasi majburiy bormi?
👉 Yo‘q, majburiy emas. Lekin qo‘yilsa, compiler tekshiradi va agar ko‘proq abstract method yozib yuborsangiz, xato beradi.
5. Functional interface va lambda expression qanday bog‘langan?
👉 Lambda expression aslida functional interface’ning abstract methodini implement qiladi.
Calculator sum = (a, b) -> a + b;
System.out.println(sum.calculate(5, 3)); // 8
6. Functional interface’da default method bo‘lishi mumkinmi?
👉 Ha, bo‘lishi mumkin, lekin ular abstract method hisoblanmaydi.
@FunctionalInterface
interface MyFunc {
void run();
default void log() {
System.out.println("Logging...");
}
}
7. Java’da tayyor functional interface’lar bormi?
👉 Ha, java.util.function paketida juda ko‘p tayyor functional interface’lar mavjud:
Predicate<T> → boolean qaytaradi
Function<T,R> → qiymatni olib boshqa qiymat qaytaradi
Consumer<T> → qiymatni qabul qiladi, lekin hech narsa qaytarmaydi
Supplier<T> → parametr olmaydi, qiymat qaytaradi
8. Method reference nima va functional interface bilan qanday ishlaydi?
👉 Method reference — mavjud methodni lambda o‘rnida ishlatish.
Consumer<String> printer = System.out::println;
printer.accept("Hello World");
Bu yerda System.out::println — bu Consumer<String>’ning accept methodini implement qiladi.
9. Functional interface faqat Java 8 da ishlaydimi?
👉 Yo‘q, functional interface’lar Java 8 dan avval ham bor edi (masalan Runnable, Callable). Faqat Java 8 dan boshlab ular lambda expression bilan ishlashni qo‘llab-quvvatladi.
10. Runnable va Callable functional interface hisoblanadimi?
👉 Ha.
Runnable → faqat void run() methodiga ega.
Callable → faqat V call() methodiga ega.
1. Functional interface nima?
👉 Functional interface — bu faqat bitta abstract method’ga ega bo‘lgan interface. U lambda expression yoki method reference bilan ishlash imkonini beradi.
2. Functional interface’da nechta method bo‘lishi mumkin?
👉 Faqat bitta abstract method bo‘lishi shart.
Lekin bir nechta default va static methodlar bo‘lishi mumkin.
3. Functional interface misol keltiring.
@FunctionalInterface
public interface Calculator {
int calculate(int a, int b);
}
4. @FunctionalInterface annotatsiyasi majburiy bormi?
👉 Yo‘q, majburiy emas. Lekin qo‘yilsa, compiler tekshiradi va agar ko‘proq abstract method yozib yuborsangiz, xato beradi.
5. Functional interface va lambda expression qanday bog‘langan?
👉 Lambda expression aslida functional interface’ning abstract methodini implement qiladi.
Calculator sum = (a, b) -> a + b;
System.out.println(sum.calculate(5, 3)); // 8
6. Functional interface’da default method bo‘lishi mumkinmi?
👉 Ha, bo‘lishi mumkin, lekin ular abstract method hisoblanmaydi.
@FunctionalInterface
interface MyFunc {
void run();
default void log() {
System.out.println("Logging...");
}
}
7. Java’da tayyor functional interface’lar bormi?
👉 Ha, java.util.function paketida juda ko‘p tayyor functional interface’lar mavjud:
Predicate<T> → boolean qaytaradi
Function<T,R> → qiymatni olib boshqa qiymat qaytaradi
Consumer<T> → qiymatni qabul qiladi, lekin hech narsa qaytarmaydi
Supplier<T> → parametr olmaydi, qiymat qaytaradi
8. Method reference nima va functional interface bilan qanday ishlaydi?
👉 Method reference — mavjud methodni lambda o‘rnida ishlatish.
Consumer<String> printer = System.out::println;
printer.accept("Hello World");
Bu yerda System.out::println — bu Consumer<String>’ning accept methodini implement qiladi.
9. Functional interface faqat Java 8 da ishlaydimi?
👉 Yo‘q, functional interface’lar Java 8 dan avval ham bor edi (masalan Runnable, Callable). Faqat Java 8 dan boshlab ular lambda expression bilan ishlashni qo‘llab-quvvatladi.
10. Runnable va Callable functional interface hisoblanadimi?
👉 Ha.
Runnable → faqat void run() methodiga ega.
Callable → faqat V call() methodiga ega.
Predicate<T> → boolean qaytaradi
Function<T,R> → bitta qiymatni olib, boshqa qiymat qaytaradi
Supplier<T> → parametr olmaydi, faqat qiymat qaytaradi
Consumer<T> → qiymat oladi, lekin hech narsa qaytarmaydi
Function<T,R> → bitta qiymatni olib, boshqa qiymat qaytaradi
Supplier<T> → parametr olmaydi, faqat qiymat qaytaradi
Consumer<T> → qiymat oladi, lekin hech narsa qaytarmaydi
1. Optional nima?
👉 Optional — bu Java 8 da qo‘shilgan container (wrapper) bo‘lib, qiymat mavjud (present) yoki mavjud emas (empty) holatlarni ifodalaydi. NullPointerException oldini olish uchun ishlatiladi.
2. Optional qanday yaratiladi?
👉 3 usuli bor:
Optional.of(value) – qiymat null emas bo‘lsa.
Optional.ofNullable(value) – qiymat null bo‘lishi ham mumkin.
Optional.empty() – bo‘sh Optional.
3. Optional dan qiymatni qanday olish mumkin?
👉 get() orqali, lekin faqat qiymat borligiga amin bo‘lsangiz. Odatda orElse(), orElseGet(), yoki ifPresent() ishlatiladi.
4. orElse() va orElseGet() farqi nima?
👉 orElse() har doim parametrdagi obyektni yaratadi, hatto ishlatilmasa ham.
👉 orElseGet() esa Supplier orqali faqat kerak bo‘lganda qiymat yaratadi.
5. isPresent() va ifPresent() farqi nima?
👉 isPresent() boolean qaytaradi va ko‘pincha if bilan ishlatiladi.
👉 ifPresent() esa qiymat mavjud bo‘lsa, berilgan lambda’ni ishga tushiradi.
6. Optional.map() va Optional.flatMap() farqi nima?
👉 map() qiymatni boshqa turga o‘zgartiradi (Optional<T> → Optional<U>).
👉 flatMap() esa ichida Optional qaytaradigan function bilan ishlaydi va nested Optional’ni tekislab yuboradi.
7. Optional.orElseThrow() qachon ishlatiladi?
👉 Qiymat mavjud bo‘lmasa, exception tashlash uchun.
userOptional.orElseThrow(() -> new UserNotFoundException());
8. Optional qayerda ishlatilmasligi kerak?
👉 Entity field’larida (masalan, JPA @Entity ichida) ishlatish tavsiya etilmaydi. Chunki ORM mapping va serialization’da muammolar tug‘diradi.
9. Optional faqat Java 8 da ishlatiladimi?
👉 Yo‘q, keyingi versiyalarda ham mavjud. Hatto Stream API va CompletableFuture kabi ko‘plab Java kutubxonalarida ham keng qo‘llanadi.
10. Optional oddiy null tekshirishdan farqi nima?
👉 if (x != null) imperativ yondashuv bo‘lsa, Optional deklarativ uslubda ishlaydi (map(), filter(), orElse() kabi metodlar orqali), kodni toza va o‘qilishi oson qiladi.
⚡️ Masalan:
👉 Optional — bu Java 8 da qo‘shilgan container (wrapper) bo‘lib, qiymat mavjud (present) yoki mavjud emas (empty) holatlarni ifodalaydi. NullPointerException oldini olish uchun ishlatiladi.
2. Optional qanday yaratiladi?
👉 3 usuli bor:
Optional.of(value) – qiymat null emas bo‘lsa.
Optional.ofNullable(value) – qiymat null bo‘lishi ham mumkin.
Optional.empty() – bo‘sh Optional.
3. Optional dan qiymatni qanday olish mumkin?
👉 get() orqali, lekin faqat qiymat borligiga amin bo‘lsangiz. Odatda orElse(), orElseGet(), yoki ifPresent() ishlatiladi.
4. orElse() va orElseGet() farqi nima?
👉 orElse() har doim parametrdagi obyektni yaratadi, hatto ishlatilmasa ham.
👉 orElseGet() esa Supplier orqali faqat kerak bo‘lganda qiymat yaratadi.
5. isPresent() va ifPresent() farqi nima?
👉 isPresent() boolean qaytaradi va ko‘pincha if bilan ishlatiladi.
👉 ifPresent() esa qiymat mavjud bo‘lsa, berilgan lambda’ni ishga tushiradi.
6. Optional.map() va Optional.flatMap() farqi nima?
👉 map() qiymatni boshqa turga o‘zgartiradi (Optional<T> → Optional<U>).
👉 flatMap() esa ichida Optional qaytaradigan function bilan ishlaydi va nested Optional’ni tekislab yuboradi.
7. Optional.orElseThrow() qachon ishlatiladi?
👉 Qiymat mavjud bo‘lmasa, exception tashlash uchun.
userOptional.orElseThrow(() -> new UserNotFoundException());
8. Optional qayerda ishlatilmasligi kerak?
👉 Entity field’larida (masalan, JPA @Entity ichida) ishlatish tavsiya etilmaydi. Chunki ORM mapping va serialization’da muammolar tug‘diradi.
9. Optional faqat Java 8 da ishlatiladimi?
👉 Yo‘q, keyingi versiyalarda ham mavjud. Hatto Stream API va CompletableFuture kabi ko‘plab Java kutubxonalarida ham keng qo‘llanadi.
10. Optional oddiy null tekshirishdan farqi nima?
👉 if (x != null) imperativ yondashuv bo‘lsa, Optional deklarativ uslubda ishlaydi (map(), filter(), orElse() kabi metodlar orqali), kodni toza va o‘qilishi oson qiladi.
⚡️ Masalan:
// Oddiy null tekshirish
if (user != null && user.getEmail() != null) {
send(user.getEmail());
}
// Optional bilan
Optional.ofNullable(user)
.map(User::getEmail)
.ifPresent(this::send);