28-блог: JavaScript даўамы: Логикалық операторлар (&&, ||, !) 6- бөлим
Жоқарыда ҳәзирге шекем JavaScript бағдарламa тили ҳаққында жазған блогларымды келтирип өттим. Бүгинги блогым сол алдыңғы блогларда түсиндирип өткен "control flow" (программаны жүргизиў логикасы) деп аталатуғын үлкен теманын ең соңғы бөлими. Егер не деп атырғанымды түсинбей атырсаңыз, жоқарыдағы силтемелерге кирип оқып шығыўды усыныс етемен.
JavaScript тилинде control flow төмендеги бөлимлерден қуралады:
Шәртлер (Conditional statements) - if, else, else if, switch
Цикл (Loops) - for, while, do...while, for...in, for...of
Логикалық операторлар - && (AND), || (OR), ! (NOT)
Демек, компьютер илиминде логикалық операторлар дегенимиз не?
Бизлер логикалық операторлардан пайдаланып компьютердиң коудты оқып, амелге асырыў тәртибин/бағдарын өзгертиўимиз мүмкин.
Алдын да айтқан едим. Компьютер коудты избе-из, жоқарыдан төменге қарап оқыйды. Ҳәр дайым басынан ақырына шекем шертилмей оқылатуғын дүзиў коуд жоқ. Коуд жазғанымызда мына коудты биринши оқыўы керекпе яки ана коудты биринши оқыўы керекпе, пайдаланыўшыға хабар көрсетемизбе яки жоқпа, ҳәм соған қусаган көплеген шешимлерге келиўимиз керек болады. Сондай ўақытта control flow-дан пайдаланамыз.
Ҳәзирге шекем if else ҳәм for loop деген программаны жүргизиў (control flow) турлерин үйрендик.
Бүгинги үйренежақ және бир дана control flow бул логикалық операторлар, яғный мына 3 белги болады: &&, ||, !
Бир сораў беремен. Светофорды билесизбе? Әлбетте! 🚦
Светофорда жасыл свет жанса машиналар қатнайтуғын жолдағы кесилиспени кесип өтe аламыз. Қызыл свет яки сары свет жанып турса тоқтап турыўымыз керек болады. ⛔
Логикалық операторларды мине усы светофор деп алсақ болады.
Сонда қалайынша? Оқыўды даўам етиң.
Логикалық операторлар дегенимиз не?
True ҳәм false деп аталатуғын мағлыўмат типлерин (data types) үйренген едик. Шынлық яки өтирикти билдиреди. (true - рас, false - жалған) Мына коуд есиңиздеме?
let isStudent = false;
let hasGraduated = true;Мен өзим ҳаққында бир-еки boolean (булев) турдеги айныўшыны жаратқан едим.
isStudent - "студентпе?" деп сорап турман. Бул өтирик. Мен студент емесмен. Сонлықтан "false" деп алдым.
hasGraduated - "оқыўды питкергенбе?" деп сорап турман. Бул шынлық. Мен Кореядағы оқыўымды 4 жыл алдын питкердим. Соның ушын "true" деп алдым.
Және бир айныўшыны жаратайық.
let hasGoodGPA = true;hasGoodGPA - "алған баҳалары (GPA) жақсыма?" деп сорап турман. Бул шынлық. Оқыўды жақсы баҳаларға питкерип шықтым. Соның ушын "true" деп алдым.
Энди жақсы оқыйтуғын студентлер ушын онлайн магазинлерге шегирме (скидка) купон беретуғын программа жаратамыз деп ойлайық. Купон тарқатып бериўден алдын еки шәртты тексериўимиз керек. 🧐
Пайдаланыўшы студентпе ҳәм алған баҳалары жақсыма?
Усы еки шәрттың екеўи де шынлық болыўы лазым. Болмаса, программамыз пайдаланыўшыға купон бермейди.
Мен купон ала аламанба? Жоқ! 😐 Менин алған баҳаларым жақсы болғаны менен, студент емесмен. Еки шәрттың биреўин қанатландыра алмайман. Программа коудты иске қоспайды.
Мине усы еки шәрттың дурыс екенин бир ўақытта тексерип, әдеўир қурамалы шәрт жаратыўға жәрдем беретуғын белги бул && есапланады. Оны инглизше сөз бенен AND деп алсақта болады.
Жоқарыдағы программаны JavaScript тилинде былайынша жазсақ болады:
let isStudent = false;
let hasGoodGPA = true;
if (isStudent && hasGoodGPA) {
console.log("Сиз шегирим купон утып алдыңыз!");
}
Көрип турғаныңыздай, && деген белгиниң еки тәрепинде турған шәрт рас болсағана, мен шегирме купонын утып аламан.
Еки шәрт екеўи де true болса, жасыл свет жанады ҳәм компьютер коудты иске қосады.
Тек жақсы оқыйтуғын студентлер купон ала береме деп ашыўланып, шәртлеримизди бираз өзгерттик деп алайық.
ҳәмме студентлерге купон бериледи.
Барлық ҳаял-қызларға купон бериледи.
Өзгериўлерге бола, және бир айныўшыны жаратамыз.
let isWoman = true;isWoman - "ҳаял адамба?" деп сорап турман. Бул шынлық. Соның ушын true деп алдым.
Демек, енди еки шәртимиздиң биреўин қанатландырса, купон тарқатып беретуғын программа жаратпақшымыз.
Мине усы еки шәрттиң дурыс екенин бир ўақытта тексерип, әдеўир қурамалы шәрт жаратыўға жәрдем беретуғын, және бир белги бул || есапланады. Оны инглизше сөз бенен OR деп алсақта болады. (OR бул инглизшеда "яки, ямаса" болады.)
Жоқарыдағы программаны JavaScript тилинде былайынша жазсақ болады:
let isStudent = false;
let isWoman = true;
if (isStudent || isWoman) {
console.log("Сиз шегирме купон утып алдыңыз!");
}Көрип турғаныңыздай || деген белгиниң қәлеген бир тәрепиндеги шәрт дурыс (true) болса / биреўи өтирик болса да, сол пайдаланыўшыға купон бериледи.
Демек, мен шегирме купонын алыўға ҳаққым барма? Аўа! Неге? Студент болмасам да, хаял адам болғаным ушын.
Егер еки шәрттиң ҳеш болмаса биреўи true болса, жасыл свет жанып, компьютер коудты иске қосады.
Түсинип алдыңызба?
Енди ҳәр бир логикалық оператор ҳаққында түсиндирип өтейик.
&& бул AND.
AND деп оқылады коуд оқығанда. && яки AND деген белги менен жазсақ болады. Бул белги еки шәрттың рас яки жалған екенин тексереди ҳәм еки шәрт те шынлық болсағана true деген мәнис қайтарады. (Светофор жасыл жанады.)
Егер еки шәрттың биреўи өтирик болса, false деген мәнис қайтарады.
Және бир мысал жазайық. Ярым ставкалы жумыс менен тәмийнлейтуғын заводқа жасы 18 ден жоқары болған ересек адамлар ҳәм ID картасы барлар кире алады деп алайық. Заводтың дәрўазасының алдына сондай адамның жасын ҳәм ID картасын тексериўши сканер программа қоямыз.
let age = 20;
let hasIDCard = true;
if (age >= 18 && hasIDCard) {
console.log("Мәрҳамат, заводқа кириң.");
} else {
console.log("Заводқа кириўге рухсат жоқ!");
}
// Нәтийже: "Мәрҳамат, заводқа кириң."Жоқарғы коудта "age>=18" ҳәм hasIDCard деген шәрт екеўи де шынлық (true). Соңлықтан if қаўсырманың ишиндеги && оператор true деген мәнисти қайтарады ҳәм "Заводқа кириң" деген жазыў көринеди.
Егер бир адамның жасы он сегизде бирақ еле ID картасын алмаған болса, коуд иске қосылама?
let age = 18;
let hasIDCard = false;
if (age >= 18 && hasIDCard) {
console.log("Мәрҳамат, заводқа кириң.");
} else {
console.log("Заводқа кириўге рухсат жоқ!");
}Жоқарыдағы коудты өзиңиз браўзер консолында жүргизип көриң.
|| бул OR.
OR деп оқылады коуд оқығанда. || белгиси ондай қырсық емес. Ол еки шәрттиң ҳеш болмаса биреўи шынлық болса, true мәнисин қайтарады.
Енди онлайн магазинимизде ҳәммеге қала күни яки дем алыс күнлери шегирме купон үлестиретуғын функцияны қосайық деп алайық.
let isWeekend = true;
let isHoliday = false;
if (isWeekend || isHoliday) {
console.log("Сиз шегирме купонына ийе болдыңыз!");
} else {
console.log("Бүгин скидка жоқ.");
}
// На’тийже: "Сиз шегирме купонына ийе болдыңыз!"Усы жерде isWeekend ("қала күниме?") деген айныўшымыз ҳақыйқат. isHoliday ("байрамба?") деген айныўшымыз өтирик. Кем дегенде бир айныўшымыз рас болса, коуд иске қосылады ҳәм бизлер шегирме купонына ийе боламыз.
Егер екеўи де жалған (false) болғанда коуд иске қосылмайды. Шегирме купоны да үлестирип берилмейди.
! бул NOT.
! оператор ҳаққында еле айтпаған едим. Бул үндеў белгисин NOT деп оқысаңыз болады.
Оның хизмети берилген рас/өтирик мәнисти қарсы мәниске төңкерип таслайды. Қалай?
Егер айныўшы рас (true) болса, !true деп жазсақ, мәнис өтирик (false) тәрепке өзгереди.
Егер айныўшы өтирик (false) болса, !false деп жазсақ, мәнис рас (true) тәрепке өзгереди.
Мысалы, вебсайтымызға келген пайдаланыўшы еле логин қылмаған болса "Login" түймесин көрсетемиз деп алайық.
let isLoggedIn = false;
if (!isLoggedIn) {
console.log("Login түймесин көрсет.");
} else {
console.log("Пайдаланыўшы логин қылған.");
}
// На’тийже: "Login түймесин көрсет."isLoggedIn деген айныўшыны "пайдаланыўшы логин қылғанба?" деп аўдармаласақ болады. Ҳәзирше "false" яғный "логин еле қылмады " деп алдық.
Демек, !isLoggedIn мәнис true деген мәнисти қайтарады. Яки бул коудты жалпақ тилде "логин қылмағаны распа?" деп келтирсек болады. Аўа, логин қылмағаны рас! Соның ушын пайдаланыўшыға "Login" түймесин көрсетемиз.
Енди, isLoggedIn айныўшыны true деп алайық. "Логин қылып вебсайтқа кирген" пайдаланыўшы деп келтирдик. Энди !isLoggedIn деген айныўшы "логин қылмағаны распа?" деп сорап тур. Яқ, бул ретки пайдаланыўшымыз логин қылыпты. Демек, isLoggedIn false мәнисин қайтарады ҳәм жоқарыдағы коудтың else бөлими иске қосылады. Экранда "Пайдаланыўшы логин қылған" деген жазыў пайда болады.
let isLoggedIn = true;
if (!isLoggedIn) {
console.log("Login түймесин көрсет.");
} else {
console.log("Пайдаланыўшы логин қылған.");
}
// Нәтийже: "Пайдаланыўшы логин қылған."Бул операторларды бирге пайдаланып, еле де қурамалы шәртлерди жаратсаңыз болады.
Мысалы, ресторанымыздағы VIP кабиналардан пайдаланыўға рухсат бериўши талонды үлестирип беретуғын программа жаратайық деп алайық. VIP қонақларымыз бул жасы жигирма бирден үлкен ҳәм VIP картасы бар яки "арнаўлы қонақ" деп белгиленген адамлар есапланады. Мысалы, танымалы бир қосықшының жасы қырқта, бирақ VIP картасы жоқ. Бирақ ол белгили бир критерияларға бола " арнаўлы қонақ" деп анықланады. Ол VIP кабинадан пайдаланыў ушын талон алыўға ҳаққысы бар.
let age = 40;
let hasVIPCard = false;
let isSpecialGuest = true;
if (age > 21 && (hasVIPCard || isSpecialGuest)) {
console.log("VIP кабинамызға хош келдиңиз!");
} else {
console.log("Ҳәзирше улыўмалық ханалардан пайдалана аласыз.");
}
// Нәтийже: "VIP кабинимизге хош келдиңиз!"age > 21 && (hasVIPCard || isSpecialGuest) - усы коуд қатары үш турли шәртти AND (&&) деген оператордың еки тәрепинде тексерип атыр.
Биринши "age > 21" тәрепи - пайдаланыўшының жасы жигирма бирден үлкенбе деп сорап тур. Берилген айныўшымызда танымалы қосықшының жасын 40 деп алдық. Демек, бул шарт "true" мәнисин қайтарады.
Екиншиси (hasVIPCard || isSpecialGuest) тәрепи - еки шәртты тексерип атыр. "hasVIPCard" деген айныўшыны "VIP картасы барма" деп аўдарсақ болады. Ол өтирик (false).
"isSpecialGuest" деген айныўшыны " арнаўлы қонақпа" деп аўдармаладық. Ол шынлық. Қонағымыз танымалы қосықшы.
Демек, OR (||) деген оператордың еки тәрепинде бир шәрт болса да шынлық болса, оператор шынлықты қайтарады.
Енди, age > 21 && (hasVIPCard || isSpecialGuest) коудтың еки тәрепи де шынлыққа (true) тең. Демек, if қаўсырманың ишинен true деген мәнис қайтып, пайдаланыўшыға VIP кабин ушын талон беремиз.
Өзлериңиз браўзер консолында JavaScript тилинде логикалық операторлардан пайдаланып бир-еки мысал жазып көриң. Бирден ҳәммесине түсинип кетиў ушын урынып, көп қыйналмаң. Ўақыт өтип, коуд жазып үйренип кете аласыз.







