Сәлеметсіз бе! Бүгінгі дәріс өте ұзақ болмайды, бірақ сөзсіз пайдалы :) Біз үштік оператор деп аталатын туралы сөйлесетін боламыз . «Үштік» «үштік» дегенді білдіреді.
if-else
Бұл сізге бұрыннан таныс шартты операторға балама . Мысал келтірейік. 18+ рейтингі бар фильмді көру үшін адам кинотеатрға баруды шешті делік. Күзетші оның жасын кіре берісте тексереді: егер ол жас шегіне сәйкес келсе, залға кіруге рұқсат береді, егер жоқ болса, оны үйіне жібереді. Класс жасап Man
, оны келесімен тексерейік 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);
}
}
Консоль шығысы:
"Все в порядке, проходите!"
Егер біз шығысты консольге алып тастасақ, тестіміз келесідей болады:
if (man.getAge() >= 18) {
securityAnswer = "It's all right, come in!";
} else {
securityAnswer = "This movie is not suitable for your age!";
}
Мұнда, шын мәнінде, қарапайым логика жұмыс істейді: бір шарт тексеріледі (жасы >= 18). Осыған байланысты securityAnswer
айнымалыға күзетшінің жауабы бар екі жолдың біреуі тағайындалады. Мұндай жағдайлар, «бір шарт – екі ықтимал нәтиже» бағдарламалауда жиі кездеседі. Сондықтан олар үшін бірдей үштік оператор құрылды. Оның көмегімен біз тексеруді codeтың бір жолына жеңілдете аламыз:
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);
}
Бұл оператордың жұмысы осылай көрінеді. Оны үштік (үштік) деп атайды, өйткені оның жұмысына 3 компонент қатысады:
- Бір шарт (
man.getAge() >= 18
) - Екі ықтимал нәтиже ( «Жарайды, алға!» және «Бұл фильм сіздің жасыңызға сай емес!» )
man.getAge() >= 18 ?
«Адамның жасы 18-ден үлкен бе, әлде оған тең бе?» Келесі бірінші нәтиже. Егер шарт қайтарылса true
, ол іске қосылады, яғни шын болса:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
Адамның жасы 18-ден үлкен бе әлде оған тең бе? Егер иә болса, айнымалыға «Бәрі жақсы, кіріңіз!»securityAnswer
мәнін беріңіз. . Одан кейін « » операторы келеді :
, одан кейін екінші нәтиже жазылады. Шарт қайтарылса false
, ол іске қосылады, яғни ол жалған:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
Адамның жасы 18-ден үлкен бе әлде оған тең бе? Егер иә болса, айнымалыға «Бәрі жақсы, кіріңіз!»securityAnswer
мәнін беріңіз. . Олай болмаса, айнымалы мәнге «Бұл фильм сіздің жасыңызға сәйкес келмейді!»securityAnswer
мәнін тағайындаңыз. Үштік оператордың жалпы логикасы осылай көрінеді. жағдайы? Нәтиже 1 : нәтиже 2 Айтпақшы, шарттың айналасында жақшаларды қоюдың қажеті жоқ: біз мұны жақсырақ оқылу үшін жасадық. Оларсыз жұмыс істейді:
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);
}
Нені пайдалану керек: if-else
, немесе үштік оператор? Өнімділік тұрғысынан айтарлықтай айырмашылық жоқ. Дәлірек айтқанда, ол бар болуы мүмкін, бірақ ол мардымсыз. Мұнда мәселе сіздің codeыңыздың оқылу мүмкіндігіне қатысты. Бағдарламалауда бұл өте маңызды: сіз жазған code дұрыс жұмыс істеп қана қоймай, сонымен қатар оқуға оңай болуы керек. Өйткені, ол басқа бағдарламашыларға, сіздің әріптестеріңізге «мұра» болуы мүмкін! Ал егер түсіну қиын болса, бұл олардың да, сіздің де жұмысыңызды қиындатады - олар әр 5 minutes сайын сізге түсініктеме алу үшін жүгіреді. Жалпы ұсыныс келесідей болуы мүмкін: шарт қарапайым және тексеру оңай болса, үштік операторды зиянсыз пайдалануға болады. Осылайша сіз codeтың көлемін және чектердің санын азайтасыз if-else
, олардың көп болуы мүмкін. Бірақ егер жағдай күрделі және көп сатылы болса, оны қолданған дұрыс if-else
. Мысалы, бұл жағдайда үштік операторды пайдалану жаман идея болар еді:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild()) ? "Come in!" : "You can not pass!";
Сондықтан мұнда не болып жатқанын бірден түсіне алмайсыз! Кодты оқу өте қиын болды. Және бәрі қиын жағдайға байланысты:
- Егер адам 18 жастан асқан немесе оған тең болса + билеті болса (немесе тегін кіруге арналған купоны болса) + қасында кішкентай балалары болмаса - олар өте алады.
- Шарттың кем дегенде бір бөлігі жалған болып қайтарылса, ол мүмкін емес.
if-else
. Иә, біздің code көлемі жағынан үлкенірек болар еді, бірақ ол бірнеше есе оқуға болатын еді. Әріптестеріңіздің ешқайсысы мұндай codeты мұраға алса, бастарын қыспайды :) Ақырында, мен сізге кітапты ұсына аламын. Дәрісте біз codeты оқу мүмкіндігі тақырыбын қозғадық. Роберт Мартиннің классикалық кітабы «Таза code» оған арналған. Онда тек жұмыс істеп қана қоймай, оқуға оңай codeты жазуға мүмкіндік беретін бағдарламашыларға арналған ең жақсы тәжірибелер мен ұсыныстар бар. JavaRush-те бұл кітапқа шолу бар .
GO TO FULL VERSION