Loading...

Логикалык операторлор

Логикалык операторлор

 

JavaScriptде төрт логикалык оператор бар: ||(ЖЕ), &&(ЖАНА) жана !(NOT), ??(Null Merge Operator). Бул жерде биз биринчи үч карап чыгабыз, оператор ??кийинки макалада болот.

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

Келгиле, аларды кененирээк карап көрөлү.

|| (ЖЕ)

"OR" оператору кош түтүк белгисине окшош:

result = a || b;

Салттуу түрдө программалоодо ЖЕ логикалык маанилерди манипуляциялоо үчүн гана колдонулат: аргументтердин кайсынысы болсо true, ал кайтарат true, антпесе кайтарат false.

JavaScript'те, биз кийинчерээк көрөбүз, бул оператор бир аз башкача иштейт. Бирок келгиле, адегенде логикалык баалуулуктарга эмне болорун карап көрөлү.

Төрт гана логикалык айкалышы бар:

 
@A@alert( true || true );   // true
alert( false || true );  // true
alert( true || false );  // true
alert( false || false ); // false@A@

true Көрүнүп тургандай, эки аргумент тең болгондон башка учурларда, операциялардын натыйжасы ар дайым болот false.

Эгерде маани логикалык типте болбосо, анда ал эсептөө максатында ага чыгарылат.

Мисалы, сан , жана - катары 1кабыл алынат :true0false

@A@if (1 || 0) { // работает как if( true || false )
  alert( 'truthy!' );
}@A@

Эреже катары, оператор берилген шарттардын ар биринин чындыгын текшерүү үчүн ||колдонулат .if

Мисалга:

 
@A@let hour = 9;

if (hour < 10 || hour > 18) {

  alert( 'Офис закрыт.' );

}@A@

Сиз көбүрөөк шарттарды тапшыра аласыз:

 
@A@let hour = 12;

let isWeekend = true;

if (hour < 10 || hour > 18 || isWeekend) {

  alert( 'Офис закрыт.' ); // это выходной

}@A@

ЖЕ "||" биринчи чыныгы баасын табат

Жогоруда айтылган логика салттуу логикага туура келет. Эми JavaScriptтин "кошумча" функциялары менен иштейли.

Кеңейтилген алгоритм төмөнкүдөй иштейт.

||ЖЕ бир нече маанилерди аткарууда :

@A@result = value1 || value2 || value3;@A@

Оператор ||төмөнкү аракеттерди аткарат:

  • Операндтарды солдон оңго карай баалайт.
  • Ар бир операнд логикалык мааниге айланат. Эгерде натыйжа болсо true, токтойт жана ошол операнддын баштапкы маанисин кайтарат.
  • Эгерде бардык операнддар жалган болсо ( false), акыркысын кайтарат.

Мааниси конверсиясыз, баштапкы түрүндө кайтарылат.

Башка сөз менен айтканда, ЖЕ чынжыр ||биринчи чыныгы маанини кайтарат, же андай маани табылбаса акыркысын.

Мисалы:

@A@alert( 1 || 0 ); // 1

alert( true || 'no matter what' ); // true

alert( null || 1 ); // 1 (первое истинное значение)

alert( null || 0 || 1 ); // 1 (первое истинное значение)

alert( undefined || null || 0 ); // 0 (поскольку все ложно, возвращается последнее значение)@A@

Бул оператордун "таза, салттуу, логикалык гана ЖЕ"ге караганда кызыктуу тиркемелерине мүмкүнчүлүк берет.

  1. Өзгөрмөлөрдүн же туюнтмалардын тизмесинен биринчи чыныгы маанини алуу.

    Келгиле, бизде маалыматтарды камтыган же болушу мүмкүн болгон бир катар өзгөрмөлөр бар деп элестетип көрөлү null/undefined. Биринчи өзгөрмөнү маалымат менен кантип таба алабыз?

    менен ||:

    @A@let currentUser = null;

    let defaultUser = "John";

    let name = currentUser || defaultUser || "unnamed";

    alert( name ); //  "John"тандалат – биринчи мааани@A@

    Эгерде жана currentUser, жана defaultUserжалган болсо, биз байкамакпыз "unnamed".

  2. Кыскартылган эсептөө.

    Операндтар бир баалуулуктар же эркин туюнтмалар болушу мүмкүн. ЖЕ ||аларды солдон оңго карай баалайт. Эсептөө биринчи чыныгы мааниге жеткенде токтойт. Бул процесс "кыскартылган баалоо" деп аталат, анткени экинчи операнд биринчи операнд бүтүндөй туюнтманы баалоо үчүн жетиштүү болбосо гана бааланат.

    Бул экинчи аргумент катары берилген туюнтма өзгөрмөнү өзгөртүү сыяктуу терс таасирге ээ болгондо абдан байкалат.

    Төмөндөгү мисал xөзгөрбөйт:

    @A@let x;

    true || (x = 1);

    alert(x); // undefined, потому что (x = 1) не вычисляется@A@

    Эгерде биринчи аргументтин мааниси болсо false, анда ||биз экинчисин эсептөөгө өтүп, дайындоо операциясын аткарабыз:

    @A@let x;

    false || (x = 1);

    alert(x); // 1@A@

    Тапшыруу бир эле мисал. Албетте, эсептөө аларга жетпесе, көрүнбөй турган башка терс таасирлер болушу мүмкүн.

    Көрүнүп тургандай, бул колдонуу учуру ||"аналогдук if". Биринчи операнд логикага айландырылат. Эгер жалган болуп чыкса, экинчисинин эсеби башталат.

    ifКөпчүлүк учурларда, кодду түшүнүүнү жеңилдетүү үчүн "жөнөкөй" дегенди колдонуу жакшы , бирок кээде бул ыңгайлуу болушу мүмкүн.

&& (ЖАНА)

ЖАНА оператору эки амперсанд катары жазылат &&:

@A@result = a && b;@A@

Салттуу программалоодо trueAND эки аргумент тең туура болсо кайтарат, антпесе false:

@A@alert( true && true );   // true

alert( false && true );  // false

alert( true && false );  // false

alert( false && false ); // false@A@

if: менен мисал 

 
@A@let hour = 12;

let minute = 30;

if (hour == 12 && minute == 30) {

  alert( 'The time is 12:30' );

}@A@

if сыяктуу эле, ар кандай мааниге elseоперанды катары уруксат берилет:

@A@if (1 && 0) { //  true && false деп эсептелинет

  alert( "иштебейт , себеби жообу жалган" );

}@A@

Ал эми "&&" биринчи жалган маанини табат

Бир нече ырааттуу ЖАНА операторлору менен:

result = value1 && value2 && value3;

Оператор &&төмөнкү аракеттерди аткарат:

  • Операндтарды солдон оңго карай баалайт.
  • Ар бир операнд логикалык мааниге айланат. Эгерде натыйжа болсо false, токтойт жана ошол операнддын баштапкы маанисин кайтарат.
  • Эгерде бардык операнддар чын болсо, акыркысы кайтарылат.

Башка сөз менен айтканда, ЖАНА биринчи жалган маанини кайтарат. Же эч нерсе табылбаса акыркысы.

Жогорудагы эрежелер ЖЕнин жүрүм-турумуна окшош. Айырмасы AND биринчи жалган маанини кайтарат, ал эми OR биринчи чыныгы маанини кайтарат .

Мисалдар:

 
@A@// Если биринчи операнд туура болсо,,

//жана экинчини кайтарылат:

alert( 1 && 0 ); // 0

alert( 1 && 5 ); // 5

// Если биринчи операнд ката болсо,

//жана кайтаратбэкинчи операнд игнор болот

alert( null && 5 ); // null

alert( 0 && "no matter what" ); // 0@A@

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

 
@A@alert( 1 && 2 && null && 3 ); // null@A@

Бардык баалуулуктар туура болгондо, акыркысы кайтарылат.

@A@alert( 1 && 2 && 3 ); // 3@A@
Оператордун артыкчылыктуулугу &&жогору||

ЖАНА операторунун артыкчылыгы &&ЖЕ операторуна караганда чоңураак ||, ошондуктан ал биринчи аткарылат.

Ошентип, код негизинен кашаадагы a && b || c && dтуюнтмалар менен бирдей : .&&(a && b) || (c && d)

ЖЕ оператору сыяктуу ||AND &&кээде алмаштыра алат if.

Мисалга:

@A@let x = 1;

(x > 0) && alert( 'Greater than zero!' );@A@

Оң тараптагы иш-аракет, &&эгерде эсептөөлөр ага жеткенде гана аткарылат. Башкача айтканда, ал сол жагында болсо alertиштейт ( .x > 0)true

Натыйжада окшош:

@A@let x = 1;

if (x > 0) {

  alert( 'Greater than zero!' );

}@A@

Бирок, эреже катары, менен вариант ifжакшыраак окулат жана кабыл алынат.

Бул ачык-айкын, ошондуктан аны колдонуу жакшы.

! (ЭМЕС)

NOT оператору илеп белгиси менен көрсөтүлөт !.

Синтаксис абдан жөнөкөй:

result = !value;

Оператор бир аргументти алып, төмөнкүнү аткарат:

  1. Алгач аргументти логикалык түргө чыгарат true/false.
  2. Андан кийин карама-каршы маанини кайтарат.

Мисалы:

@A@alert( !true ); // false

alert( !0 ); // true@A@

Атап айтканда, кош ЭМЕС !!маанилерди логикалык түргө айландыруу үчүн колдонулат:

@A@alert( !!"non-empty string" ); // true

alert( !!null ); // false@A@

Башкача айтканда, биринчиси маанини логикага айландырбайт жана тескерисин кайтарат, ал эми экинчиси аны кайра ИНВЕРТТЕБЕЙТ. Акыр-аягы, биз жөнөкөй маанини логикалык өзгөртүүгө ээбиз.

Муну жасоонун бир аз көбүрөөк жолу бар - орнотулган функция Boolean:

@A@alert( Boolean("non-empty string") ); // true

alert( Boolean(null) ); // false@A@

NO артыкчылыктуулугу !бардык логикалык операторлордун эң жогоркусу, ошондуктан ал ар дайым биринчи, &&же алдында аткарылат ||.

Tasks

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

Төмөнкү код эмнени чыгарат?

alert( null || 2 || undefined );
чечим
маанилүүлүгү: 3

Төмөнкү код эмнени чыгарат?

alert( alert(1) || 2 || alert(3) );
чечим
маанилүүлүгү: 5

Төмөнкү код эмнени чыгарат?

alert( 1 && null && 2 );
чечим
маанилүүлүгү: 3

Төмөнкү код эмнени чыгарат?

alert( alert(1) && alert(2) );
чечим
маанилүүлүгү: 5

Төмөнкү код эмнени чыгарат?

alert( null || 2 && 3 || 4 );
чечим
маанилүүлүгү: 3

ifӨзгөрмөнүн ageортосунда 14жана камтылгандыгын текшерүү үчүн шарт жазыңыз 90.

"Камтыган" өзгөрмөнүн мааниси же ageбарабар болушу мүмкүн экенин билдирет .1490

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

ifӨзгөрмөнүн мааниси ageдиапазондо ЖОК 14жана камтылгандыгын текшерүү үчүн шарт жазыңыз 90.

Эки вариантты жазыңыз: биринчиси NOT операторун колдонуп !, экинчиси бул операторсуз.

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

Төмөнкүлөрдүн кайсынысы alertиштейт?

Кандай конкреттүү баалуулуктар шарттарда туюнтмалардын натыйжалары болот if(...)?

if (-1 || 0) alert( 'first' );
if (-1 && 0) alert( 'second' );
if (null || -1 && 1) alert( 'third' );
чечим
маанилүүлүгү: 3

колдонуу менен кирүү үчүн сурай турган кодду жаз prompt.

Эгер конок "Админге" кирсе, анда promptал сырсөздү сурайт, эч нерсе кирбесе же баскыч басылса Esc- "Жокко чыгарылды" көрсөтүү, болбосо "Мен сени тааныбайм" дегенди көрсөтүү.

Сырсөздү төмөнкүдөй текшериңиз:

  • Эгерде "Мен жооптуумун" сырсөзү киргизилсе, анда "Салам!"
  • Болбосо - "Жараксыз сырсөз",
  • Эгерде жокко чыгарылса - "Жокко чыгарылды".

 

Чечүү үчүн уяланган блокторду колдонуңуз if. Коддун стилине жана окулушуна көңүл буруңуз.

Ишара: Бош киргизүүнү чакырууга өткөрүү, promptбош сапты кайтарат ''EscСуроо учурунда баскычты басуу кайтарып берет null