Салом! Лексияи имрӯза чандон тӯлонӣ нахоҳад буд, аммо бешубҳа муфид хоҳад буд :) Мо дар бораи оператори ба истилоҳ семарӣ сӯҳбат хоҳем кард . "Тернарӣ" маънои "сегона" -ро дорад. Ин алтернатива ба оператори шартӣ аст
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и шумо дахл дорад. Ин дар барномасозӣ бениҳоят муҳим аст: рамзи навиштани шумо бояд на танҳо дуруст кор кунад, балки барои хондан осон бошад. Охир, он ба дигар барномасозон, хамкасбони шумо «мерос» шуда метавонад! Ва агар фаҳмидан душвор бошад, ин ҳам кори онҳо ва ҳам кори шуморо мушкил мекунад - онҳо дар ҳар 5 дақиқа ба назди шумо барои шарҳ додан давида меоянд. Тавсияи умумӣ метавонад чунин садо диҳад: агар шарт оддӣ ва осон барои тафтиш бошад, шумо метавонед оператори сегонаро бе зарар истифода баред. Бо ин роҳ шумо миқдори 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и хондан осонро нависед. Баррасии ин китоб дар JavaRush мавҷуд аст.
GO TO FULL VERSION