Salom! Bugungi ma'ruza juda uzoq bo'lmaydi, lekin albatta foydali bo'ladi :) Biz uchlik operator deb ataladigan narsa haqida gaplashamiz . "Ternary" "uchlik" degan ma'noni anglatadi.
if-else
Bu siz allaqachon tanish bo'lgan shartli operatorga muqobildir . Keling, misol keltiraylik. Aytaylik, bir kishi 18+ reytingga ega filmni ko'rish uchun kinoteatrga borishga qaror qildi. Qo'riqchi kiraverishda uning yoshini tekshiradi: agar u yosh chegarasiga to'g'ri kelsa, u zalga kirishga ruxsat beradi, agar bo'lmasa, uni uyiga yuboradi. Keling, sinf yaratamiz Man
va uni tekshiramiz if-else
:
public class Man {
private int age;
public Man(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Man man = new Man(22);
String securityAnswer;
if (man.getAge() >= 18) {
securityAnswer = "It's all right, come in!";
} else {
securityAnswer = "This movie is not suitable for your age!";
}
System.out.println(securityAnswer);
}
}
Konsol chiqishi:
"Все в порядке, проходите!"
Agar biz chiqishni konsolga olib tashlasak, testimiz quyidagicha ko'rinadi:
if (man.getAge() >= 18) {
securityAnswer = "It's all right, come in!";
} else {
securityAnswer = "This movie is not suitable for your age!";
}
Bu erda, aslida, oddiy mantiq ishlaydi: bitta shart tekshiriladi (yosh >= 18). Bunga qarab, securityAnswer
qo'riqchining javobiga ega bo'lgan ikkita satrdan biri o'zgaruvchiga tayinlanadi. Bunday holatlar, ya'ni "bir shart - ikkita mumkin bo'lgan natija" dasturlashda juda tez-tez uchraydi. Shuning uchun ular uchun bir xil uchlik operator yaratilgan. Uning yordamida biz tekshirishimizni bitta kod qatoriga soddalashtirishimiz mumkin:
public static void main(String[] args) {
Man man = new Man(22);
String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";
System.out.println(securityAnswer);
}
Ushbu operatorning ishi shunday ko'rinadi. U uchlik (uchlik) deb ataladi, chunki uning ishida 3 ta komponent ishtirok etadi:
- Bitta shart (
man.getAge() >= 18
) - Ikkita mumkin bo'lgan natija ( "Yaxshi emas, davom et!" va "Bu film sizning yoshingizga mos emas!" )
man.getAge() >= 18 ?
"Insonning yoshi 18 dan kattami yoki unga tengmi?" Quyidagi birinchi natija. Agar shart qaytarilsa true
, u yonadi, ya'ni to'g'ri bo'lsa:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
Odamning yoshi 18 yoshdan kattami yoki unga tengmi? Ha bo'lsa, o'zgaruvchiga "Hammasi yaxshi, kiring!"securityAnswer
qiymatini belgilang. . Undan keyin “ ” operatori keladi :
, undan keyin ikkinchi natija yoziladi. Agar shart qaytarilsa false
, u ishga tushadi, ya'ni noto'g'ri:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
Odamning yoshi 18 yoshdan kattami yoki unga tengmi? Ha bo'lsa, o'zgaruvchiga "Hammasi yaxshi, kiring!"securityAnswer
qiymatini belgilang. . Agar yo'q bo'lsa, o'zgaruvchiga "Bu film sizning yoshingizga mos kelmaydi!securityAnswer
" Uchlik operatorning umumiy mantig'i shunday ko'rinadi. holat? 1-natija: 2-natija Aytgancha, shart atrofida qavs qo'yish shart emas: biz buni ko'proq o'qilishi uchun qildik. Ularsiz ishlaydi:
public static void main(String[] args) {
Man man = new Man(22);
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
System.out.println(securityAnswer);
}
Nimadan foydalanish kerak: if-else
, yoki uchlik operatori? Ishlash nuqtai nazaridan unchalik katta farq yo'q. Aniqrog'i, u mavjud bo'lishi mumkin, ammo ahamiyatsiz. Bu erda savol sizning kodingizning o'qilishi mumkinligi bilan bog'liq. Dasturlashda bu juda muhim: siz yozgan kod nafaqat to'g'ri ishlashi, balki o'qish oson bo'lishi kerak. Axir, u boshqa dasturchilarga, sizning hamkasblaringizga "meros" bo'lishi mumkin! Va agar tushunish qiyin bo'lsa, bu ularning ham, sizning ham ishingizni murakkablashtiradi - ular har 5 daqiqada tushuntirish uchun sizga yugurishadi. Umumiy tavsiya shunday bo'lishi mumkin: agar shart oddiy va tekshirish oson bo'lsa, siz uchlik operatoridan zararsiz foydalanishingiz mumkin. Shunday qilib, siz kod miqdori va cheklar sonini kamaytirasiz if-else
, ular allaqachon ko'p bo'lishi mumkin. Ammo agar vaziyat murakkab va ko'p bosqichli bo'lsa, undan foydalanish yaxshiroqdir if-else
. Masalan, bu holda uchlik operatoridan foydalanish yomon fikr bo'ladi:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild()) ? "Come in!" : "You can not pass!";
Shunday qilib, bu erda nima bo'layotganini darhol tushunolmaysiz! Kodni o'qish juda qiyin bo'ldi. Va barchasi qiyin vaziyat tufayli:
- Agar shaxs 18 yoshdan katta yoki unga teng bo'lsa + chiptasi bo'lsa (yoki bepul kirish uchun kupon bo'lsa) + ular bilan kichik bolalari bo'lmasa - ular o'tishlari mumkin.
- Agar shartning kamida bitta qismi noto'g'ri bo'lsa, unda bu mumkin emas.
if-else
. Ha, bizning kodimiz hajmi kattaroq bo'lar edi, lekin u bir necha marta o'qilishi mumkin edi. Va sizning hamkasblaringizdan hech biri, agar ular bunday kodni meros qilib olsalar, boshlarini changallamaydilar :) Nihoyat, men sizga kitobni tavsiya qilaman. Ma'ruzada biz kodni o'qish imkoniyati mavzusiga to'xtaldik. Robert Martinning "Toza kod" klassik kitobi unga bag'ishlangan. Unda dasturchilar uchun eng yaxshi amaliyotlar va tavsiyalar mavjud bo'lib, ular sizga nafaqat ishlaydigan, balki o'qilishi oson kod yozish imkonini beradi. JavaRush-da ushbu kitobning sharhi mavjud .
GO TO FULL VERSION