1. Sintaksis shakar
Dasturchilar murakkab kod yoki mantiqni bir necha qator yozish orqali ifodalashni yaxshi ko'radi va kod ixcham va o'qilishi oson bo'ladi. Ba'zan dasturlash tillarini ishlab chiqarganlar ularga bu borada yordam beradi.
Tilda foydalanuvchi uchun qisqaroq yo'lni taklif qiluvchi xususiyatlar sintaksis shakar deb ataladi. Aslida, Java-da bu juda kam.
Java ishlab chiqaruvchilari Java-dan imkon qadar ortiqcha narsalarni yo'q qilib tashlashdi. C++ da bir narsani o'n xil usulda qilish mumkin bo'lsa, Java-da odatda buni faqat bitta usulda qilish mumkin.
Ammmo, bunday unifikatsiya na Java dasturchilariga, na Java yaratuvchilariga yoqadi. Va ba'zida ular oddiy odamlar uchun hayotni osonlashtiradilar, masalan, biz bilan.
Siz allaqachon sintaksis shakarga oid narsani o'rganib chiqqansiz - bu autoboxing va unboxing. Taqqoslang:
| Uzun kod | Ixcham kod |
|---|---|
|
|
|
|
|
|
Chapdagi uzun kod o'rniga, siz o'ngdagi kabi yanada ixcham kod yozishingiz mumkin. Aqlli Java-kompilyator qisqa kod asosida uning to'liq versiyasini o'zi yaratadi. Bu sintaksis shakar hisoblanadi.
2. O'zgaruvchi turi chiqarish – var
Java 11 da kompilyator yanada aqlli bo'ldi va endi o'zgaruvchi turini qiymat turi asosida aniqlay oladi. Bu kodda quyidagicha ko'rinadi:
var isim = qiymat;
Qayerda isim — yangi o'zgaruvchi ismi, qiymat — uning boshlang'ich qiymati, va var — o'zgaruvchi e'lon qilish uchun ishlatiladigan kalit so'zdir. isim o'zgaruvchi turi unga berilayotgan qiymat bilan bir xil bo'ladi.
Misollar:
| Bu kodni qanday ko'ramiz | Kompilyator nima ko'radi |
|---|---|
|
|
|
|
|
|
|
|
|
|
Kompilyator o'zgaruvchining turini aniqlaydi yoki, boshqa so'z bilan aytganda, o'zgaruvchi turini chiqaradi berilayotgan qiymat asosida.
Dasturchilar orasida var imkoniyatini tilga qo'shish kerakmi yoki yo'qmi degan mavzuda ko'plab munozaralar bo'ldi. Ko'pchilik var dan ortiqcha foydalana boshlanishidan va kodning o'qilishi qiyinlashishidan qo'rqishdi.
Bunda bir tomchi haqiqat bor, shuning uchun var dan foydalanishni kodning o'qilishligini oshiradigan joylarda ishlatish yaxshiroqdir. Masalan, quyidagi ikki holatda:
Holat 1: O'zgaruvchi qiymatiga qarab, o'zgaruvchi turi darhol tushunarli
| Kod | Izoh |
|---|---|
|
O'zgaruvchi turi InputStream |
|
O'zgaruvchi turi String |
Ammo, quyidagi hollar var dan foydalanish yaramaydi. Qani, o'zgaruvchi turi nima ekanligini ayting-chi?
| Kod | Izoh |
|---|---|
|
O'zgaruvchi turini aniqlash qiyin |
|
O'zgaruvchi turini aniqlash qiyin |
Holat 2: O'zgaruvchi turi kodni tushunish uchun muhim emas
Kodda ko'pincha o'zgaruvchi hech qanday metodni chaqirmaydi – o'zgaruvchi faqat vaqtincha biror narsani saqlash uchun ishlatiladi. var foydalanish bu yerda kodni tushunishni kamaytirmaydi:
| Uzun kod | Ixcham kod |
|---|---|
|
Biz stream dan metama'lumotlarni olib, storage ga saqladik. data o'zgaruvchi turi qanday bo'lgani – muhim emas. |
Oltin o'rtaliq
Hoziroq bitta va bir xil kodni yozishning uch usulini keltiraman. var dan foydalanish optimal variant bo'ladi.
| Kod | Izoh |
|---|---|
|
Juda ixcham |
|
A'lo darajada |
|
Juda mantikli |
Birinchi satrdagi variantdan ikkinchi satrdagi varianta o'tganimizda, biz o'zgaruvchi nomi (headerInfo) orqali kodni biroz tushunarli qildik. Endi aniqki, metod oddiygina metama'lumotni qaytarmaydi, balki sarlavhalar haqida ma'lumot qaytaradi.
Uchinchi variant ortiqcha bo'lardi. Nima bo'libdi, headerInfo turi FileMetaInfo ekan – bu allaqachon getFileMetaInfo() metodidan deyarli aniq edi. Bundan qiziqarli narsa metama'lumotning maqsadi.
3. Turlarni tushirish — diamond operator: <>
var operatori paydo bo'lishidan oldin, kompilyatorni kollektsiyalar turlarini chiqarishga o'rgatishga urinishlar bo'ldi. Bu yozuv biroz ortiqcha ko'rinadi:
ArrayList<String> list = new ArrayList<String>();
Java ning yettinchi versiyasidan boshlab, kollektsiya elementi turi o'zgaruvchi e'lon qilingan paytda ko'rsatilgan bo'lsa, turini yozmaslik mumkin bo'ldi. Shu bilan gapda yuqoridagi kodni biroz qisqartirilgan shaklda yozish mumkin:
ArrayList<String> list = new ArrayList<>();
Ko'rib turganingizdek, String turini ikkinchi marotaba yozish shart emas. var operatordan foydalanishga qaraganda unchalik soliq emas, lekin o'sha vaqtda bu ham yutuq edi.
Kollektsiya turida bo'sh uchburchak qavslar diamond operator deb ataldi: ikkita qavs brilyant siluetini eslatar edi.
var va diamond operator ni bir vaqtning o'zida ishlatish tavsiya etilmaydi:
var list = new ArrayList<>();
Bu yerda kollektsiya saqlaydigan turga oid hech qanday ma'lumot qolmaydi va tur ArrayList<Object> sifatida aniqlanadi.
4. Ikkita qavslardan foydalanish
Massivni tezkor ishga tushirishni eslaysizmi?
Biz u yerda faqat qavslarda qiymatlarni sanab o'tardik:
| Misollar |
|---|
|
|
Java yaratuvchilari ma'lumotlarni massivinga yozish uchun qavslardan foydalanish g'oyasini yoqtirdilar. Ammo, kollektsiyalarda qanday bo'lishi kerak?
Kollektsiyalar uchun ham xayol yetdi: ikki marta qavslardan foydalanishga ruxsat berildi.
| Shakar bilan | Shakarsiz |
|---|---|
|
|
Agar kompilyator chapdagi misoldagi kodni uchratsa, uni o'ngdagi kodga o'tkazadi.
Kod juda ixchamroq bo'lib qolmaydi. Asosan kichkina detallarni tejash: har safar list deb yozmaslik kerak. Bu, o'zgaruvchi nomi juda uzun bo'lsa, foydali bo'lishi mumkin.
Agar kimningdir loyihasida bunday kod uchratsangiz, ajablanmang 🙂
GO TO FULL VERSION