Loading...

Шарттуу бутак

Шарттуу бутак: if, '?'

 

Кээде шарттарга жараша ар кандай аракеттерди жасоого туура келет.

Бул үчүн биз операторду ifжана шарттуу операторду колдонсок болот ?, ал "суроо белгиси" оператору деп да аталат.

"if" билдирүүсү

Инструкция if(...)шартты кашаанын ичинде баалайт жана эгер натыйжа болсо true, код блогун аткарат.

Мисалы:

@A@let year = +prompt('ECMASCipt-2015 канчнчы жылы жарыяланган?');

if (year == 2015)

alert ("Туура!")@A@

Жогорудагы мисалда шарт жөнөкөй теңдик тести ( year == 2015), бирок ал алда канча татаал болушу мүмкүн.

Эгерде биз бир нече инструкцияны аткаргыбыз келсе, анда код блогун тармал кашаага алышыбыз керек:

@A@if (year == 2015) {

alert( "туура !" );

alert( "Акылдуусуз!" );

}@A@

Бир гана буйрук аткарылып жатса дагы, {}операторду колдонгон сайын тармал кашааларды колдонууну сунуштайбыз . ifБул коддун окулушун жакшыртат.

Логикалык конверсия

Инструкция if (…)кашаадагы туюнтманы баалайт жана натыйжаны логикалык түргө которот.

Типти конверсиялоо бөлүмүндөгү типти өзгөртүү эрежелерин эстеп көрөлү :

  • Сан 0, бош сап ""nullжана undefinedболуп NaNкалат false. Ушундан улам алар "жалган" баалуулуктар деп аталат.
  • Калган баалуулуктар болуп калат true, ошондуктан алар "чындык" ("чындык") деп аталат.

Ошентип, бул шартта код эч качан аткарылбайт:

 

if (0) { // 0 is falsy
  ...
}

... жана муну менен, ал ар дайым аткарылат:

if (1) { // 1 is truthy
  ...
}

Биз ошондой эле өзгөрмөгө алдын ала эсептелген логикалык маанини бере алабыз if, мисалы:

@A@ let condition = (year == 2015); // trueга айланабы же false

if (condition) {

  ...

} @A@

"Башка" бөгөт коюу

Билдирүүдө ifкошумча "else" блогу болушу мүмкүн ("башкача"). Шарт туура эмес болгондо аткарылат.

Мисалы:

@A@let year = prompt(' ECMAScript-2015 спецификациясы качан жарыяланган?', ''); if (year == 2015) { alert( 'туура!' ); } else { alert( 'туура эмес!' ); // 2015 маанисен башка маани }@A@

Бир нече шарттар: "башка болсо"

Кээде шарттын бир нече варианттарын текшерүү керек. Бул үчүн блок колдонулат else if.

Мисалы:

 
 
@A@let year = prompt('ECMAScript-2015 спецификациясы качан жарыяланган?', '');

if (year < 2015) {
  alert( 'бир аз эрте...' );
} else if (year > 2015) {
  alert( 'бир аз кечиррек' );
} else {
  alert( 'туура!' );
}@A@

Жогорудагы коддо JavaScript адегенде year < 2015. Эгер ал жалган болсо, ал кийинки шартка өтөт year > 2015. Эгер ал да жалган болсо, анда акыркысы иштейт alert.

Көбүрөөк блоктор else ifболушу мүмкүн . Блоктун болушу elseмилдеттүү эмес.

Шарттуу оператор "?"

Кээде шартка жараша өзгөрмө аныктообуз керек.

Мисалы:

@A@let accessAllowed;
let age = prompt('канча жаштасыз?', '');

if (age > 18) {
  accessAllowed = true;
} else {
  accessAllowed = false;
}

alert(accessAllowed);@A@

"Шарттуу" деп аталган оператор "суроо белгиси" бизге муну кыскараак жана жөнөкөй жол менен жасоого мүмкүндүк берет.

Оператор суроо белгиси менен көрсөтүлөт ?. Ал ошондой эле "үчтүк" деп аталат, анткени бул оператордун, анын түрүндөгү жалгыз, үч аргументи бар.

Синтаксис:

@A@let result = условие ? значение1 : значение2;@A@

Алгач баа берет условие: эгер чын болсо, анда кайтарат значение1, болбосо кайтарат значение2.

Мисалы:

@A@let accessAllowed = (age > 18) ? true : false;@A@

Техникалык жактан алганда, биз age > 18. Суроо белгиси операторунун артыкчылыктуулугу төмөн, ошондуктан ал салыштыруудан кийин аткарылат >.

Бул мисал мурункудай эле кылат:

@A@// салыштыруу оператору "age > 18" 
// (скобкага салуунун зарылдыгы жок)
let accessAllowed = age > 18 ? true : false;@A@

Бирок кашаалар кодду окууну жеңилдетет, андыктан аларды колдонууну сунуштайбыз.

Эскертүү боюнча:

Жогорудагы мисалда сиз суроо белгисинин операторун колдонуудан качсаңыз ?болот салыштыруунун өзү эле кайтып келет true/false:

@A@// то же самое
let accessAllowed = age > 18;@A@

Бир нече '?' операторлору

Суроо белгиси операторлорунун ырааттуулугу ?бирден ашык шартка көз каранды болгон маанини кайтарууга мүмкүндүк берет.

Мисалы:

@A@let age = prompt('Возраст?', 18);

let message = (age < 3) ? 'салам кичи дос !' :
  (age < 18) ? 'салам!' :
  (age < 100) ? 'саламатсызбы!' :
  'Кандай башкача жаш !';

alert( message )@A@

Башында эмне болуп жатканын түшүнүү кыйын болушу мүмкүн. Бирок жакшыраак текшерүүдөн кийин, бул кадимки сериялык текшерүү экенин көрөбүз:

  1. Биринчи суроо белгиси текшерет age < 3.
  2. Эгер чын болсо, кайтарат 'Здравствуй, малыш!'. Болбосо, ал “:” кош чекиттен кийинки туюнтманы текшерет, баалайт age < 18.
  3. Эгер чын болсо, ал кайтып келет 'Привет!'. Болбосо, ал кийинки кош чекиттен кийинки туюнтманы текшерет ":", ге баа берет age < 100.
  4. Эгер чын болсо, ал кайтып келет 'Здравствуйте!'. Болбосо, акыркы кош чекиттен кийинки туюнтманы кайтарат - 'Какой необычный возраст!'.

Бул колдонулганда кандай көрүнөт if..else:

@A@if (age < 3) {
  message = 'салам кичи дос!';
} else if (age < 18) {
  message = 'салам!';
} else if (age < 100) {
  message = 'Саламатсызбы!';
} else {
  message = 'Кандай башкача жаш!';
}@A@

салттуу эмес колдонуу "?"

Кээде "суроо белгиси" оператору ?алмаштыруу катары колдонулат if:

 
 
@A@let company = prompt(' JavaScript кайсы компания  тузгон?', '');

(company == 'Netscape') ?
   alert('Верно!') : alert('Туурамес.');@A@

Шартка жараша company == 'Netscape'биринчи же экинчи бөлүгү аткарылат ?.

Бул жерде биз натыйжаны өзгөрмөгө дайындаган жокпуз. Анын ордуна, шартка жараша ар кандай кодду аткарабыз.

Суроо белгисинин операторун мындай колдонуу сунушталбайт.

Бул белги эквиваленттүү инструкциядан кыскараак болсо да if, ал азыраак окулат.

Бул жерде, салыштыруу үчүн, ошол эле кодду колдонгон if:

 
 
@A@let company = prompt('JavaScript кайсы компания тузгон', '');

if (company == 'Netscape') {
  alert('туура!');
} else {
  alert('туура эмес.');
}@A@

Окуу учурунда көздөр кодду вертикалдуу сканерлейт. Бир нече сапты камтыган код блокторун окуу узун, горизонталдуу нускамаларга караганда бир топ жеңил.

"Суроо белгиси" операторунун мааниси ?шартка жараша тигил же бул маанини кайтарып берүү. Сураныч, аны ошол үчүн колдонуңуз. Ар кандай код жолдорун аткаруу керек болгондо, колдонуңуз if.

Tasks

маанилүүлүгү: 5

чыгабы alert?

if ("0") {
  alert( 'салам' );
}
чечим
маанилүүлүгү: 2

конструкциясын колдонуп if..else, "JavaScript'тин "расмий" аталышы эмне?" деп сураган кодду жазыңыз.

Эгер колдонуучу "ECMAScript" киргизсе, анда төмөнкүнү көрсөт: "Туура!" Болбосо, көрсөтүү: "Билбейсиңби? ECMAScript!"

Демо жаңы терезеде

чечим
маанилүүлүгү: 2

Конструкцияны колдонуп if..else, санды кабыл алган кодду жазыңыз promptжана андан кийин төмөнкүгө чыгарыңыз alert:

  • 1мааниси нөлдөн жогору болсо,
  • -1мааниси нөлдөн аз болсо,
  • 0мааниси нөл болсо.

Колдонуучу сандарды гана киргизет деп күтүлүүдө.

Демо жаңы терезеде

чечим
маанилүүлүгү: 5

ifШарттуу операторду колдонуп конструкцияны кайра жазыңыз '?':

let result;

if (a + b < 4) {
  result = 'Мало';
} else {
  result = 'Много';
}
чечим
маанилүүлүгү: 5

if..elseБир нече операторлорду колдонуп кайра жазыңыз '?'.

Окуу үчүн кодду бир нече саптарга бөлүү сунушталат.