Dart control flow

Dart control flow

Урсгалыг удирдах

/ Control Flow /

Программ бичих явцад нөхцөл байдал хэрхэн өрнөхийг тохиолдол бүрт тооцох хэрэгтэй болдог. Жишээ нь тооны машины апп байлаа гэж бодоход хэрэглэгч нэмэх товч дарвал ингэнэ, хасах товч дарвал тэгнэ гэх мэтээр программыг тухайн тооцооллыг хийх үйлдэлрүү чиглүүлдэг. Программчлалын хэлэнд үүнийг Control Flow хэмээдэг.

Харьцуулалт хийх / Making comparisons /

Бид Dart хэлний int, double, String гэсэн төрлүүдтэй хэдийн танилцсан билээ. Эдгээр төрлүүд дотроо ямар нэг өгөдлийг агуулдаг бөгөөд тэр өгөгдлийг ижил төрлийн өгөгдлөөр сольж болдог. Харин үүнээс гадна тийм-үгүй гэж хариулж болох өгөдлийн төрөл бас байдаг.

  • Хаалга онгорхой байна уу?
  • Гахай нисч чаддаг уу?
  • Замын гэрэл улаан асч байна уу?
  • Чи эмээгээсээ залуу юу? гэх мэт асуултын хариуг хадгалмаар бол тийм эсвэл үгүй гэж хадгалмаар байгаа биз?

Boolean values

Dart хэлэнд зөвхөн ийм хариултыг хадгалах зориулалттай төрөл байдаг. Тэрийг Boolean гэх ба bool гэж тэмдэглэнэ. Утга нь зөвхөн true эсвэл false байх боломжтой. За ингээд bool хувьсагч зарлаж үзэцгээе.


const bool answerYes = true;
const bool answerNo = false;
                        

Хэрвээ type inference-ийг санаж байгаа бол bool гэж бичихгүй ч байж болно.


const answerYes = true;
const answerNo = false;
                                                    

Boolean Operators

Тэнцүү эсэхийг шалгах

Boolean operator ашиглан хувьсагчдыг хооронд нь ижил байна уу, их эсвэл бага байна уу гэх мэт харьцуулалт хийх боломжтой.

Тэнцүү эсэхийг шалгахдаа == оператор ашиглана:


const doesOneEqualTwo = (1 == 2);
print(doesOneEqualTwo);
                    

Мөн тэнцэхгүй эсэхийг шалгаж болно. Ингэхдээ != оператор ашиглана:


                        const doesOneNotEqualTwo = (1 != 2);
                        print(doesOneNotEqualTwo);
                                            

Их эсвэл бага эсэхийг шалгах

Их эсвэл багыг шалгахын тулд >, < ашиглана:


const isOneGreaterThanTwo = (1 > 2);
print(isOneGreaterThanTwo );
const isOneLessThanTwo = (1 < 2);
print(isOneLessThanTwo );
                                            

Их буюу тэнцүү, бага буюу тэнцүү шалгах тохиолдол:


print(1 <= 2);
print(2 <= 2);

print(2 >= 1);
print(2 >= 2);
                       

AND Operator

Заримдаа ямар нэгэн үйлдэл хийхэд хэд хэдэн нөхцөл бүрдэж байж боломжтой болдог. Жишээ нь Болд маргааш найз Чимэгээтэй хамт дугуй унамаар байлаа гэж бодъё. Чимгээ гэрийн даалгавар ихтэй байгаа гэж хэлсэн. Бас бороо орж магадгүй үүлэрхэг байгаад байдаг. Тэгэхээр дараах 2 нөхцөл БҮГД биелж байж маргааш сайхан зугаалах боломжтой болно.

  • Бороо орохгүй нар гарсан
  • Чимэгээ гэрийн даалгавараа хийж дуусгасан

Аль нэг нөхцөл биелээгүй тохиолдолд зугаалга худлаа болно.

За одоо дээрх жишээг программчилж үзье:


const isSunny = true;
const isFinished = true;
const willGoCycling = isSunny && isFinished;
print(willGoCycling );
                    

Аль нэгийг худал болгоод ажиллуулаад үзээрэй.

OR Operator

Зарим тохиолдолд хэд хэдэн нөхцлийн аль нэг л биелэхэд хангалттай байж болно. Жишээ нь Чимэгээ имжний зураг зурах даалгавар авчээ. Имж яаж харагддагийг сайн мэдэхгүй учир Австрали явж амьдаар нь харж болно. Эсвэл хэн нэгний авсан фото зураг байвал харж байгаад зурж чадна. Тэгэхээр дараах 2 нөхцлийн АЛЬ НЭГ л биелэхэд Чимэгээ зурагаа зурна.


                            const willTravelToAustralia = true;
                            const canFindPhoto = false;
                            const canDrawKangaroo = willTravelToAustralia || canFindPhoto;
                       

Операторын давамгай чанар / Operator Precedence /

Хэд хэдэн нөхцөл шалгах бол яах вэ?


                        3 > 4 && 1 < 2 || 1 < 4
                    

Үүнийг хялбаршуулбал:


                        false && true || true
                    

Dart үүний эхний && операторыг биелүүлээд дараа нь || операторыг ажиллуулна.

Аль операторыг түрүүлж ажиллуулах вэ, аль нь давамгай вэ гэдэг асуудал тулгарна. +, -, *, / арифметиĸ операторуудын аль нь түрүүлж хийгддэгийг бид сайн мэддэг. Мөн хаалтанд бичигдсэн илэрхийлэл түрүүлж хийгддэг гэдгийг сайн мэддэг. Тэгвэл логиĸ операторуудын хувьд бас ийм дүрэм үйлчилдэг.

Оператор Тайлбар
! Эсрэг
>, >=, <, <= Их, их буюу тэнцүү, бага, бага буюу тэнцүү
==, != Тэнцүү, тэнцүү биш
&& AND
|| OR

Хүснэгтэнд байгаа оператор дээр байрлах тусам давамгай байдал нэмэгдэнэ. Тэгэхээр && оператор || оператороос түрүүлж ажиллана гэсэн үг.

String Equality

Заримдаа хоёр String хоорондоо тэнцүү эсэхийг тодорхойлох шаардлагатай болно. Жишээлбэл, Зураг дээрх амьтныг нэрлэх тоглоом дээр тоглогч зөв хариулсан эсэхийг мэдэхийн тулд оруулсан нэр нь хариутай таарч байгаа эсэхийг шалгана гэсэн үг.

Dart дээр тэнцүүгийн оператор болох == ашиглан теĸст мөрүүдийг харьцуулж болно (Тоонуудыг харьцуулахтай адил.) Жишээлбэл:


const guess = 'dog';
const guessEqualsCat = guess == 'cat';
                        

За ингээд Boolean тухай ойлголттой болсон учир Урсгалыг удирдах / Control Flow ажилдаа орцгооё!

The If Statement

Програмын урсгалыг хянах хамгийн анхан шатны бөгөөд хамгийн түгээмэл арга бол if мэдэгдэл ашиглах явдал юм. Энэ нь зөвхөн тодорхой нөхцөл үнэн байгаа тохиолдолд програмыг ямар нэгэн зүйл хийх боломжийг олгодог.


                        if (2 > 1) {
                            print('Yes, 2 is grater than 1.');
                            }
                        

The Else Clause

Хэрэв if нөхцөл false байдал үүссэн тохиолдолд ĸодын урсгалыг өөрчлөхийн тулд тулд if мэдэгдлийг дэлгэрүүлж болно. Үүнийг else clause гэж нэрлэдэг.


const animal = 'Fox';
if (animal == 'Cat' || animal == 'Dog') {
print('Animal is a house pet.');
} else {
print('Animal is not a house pet.');
}
                        

if нөхцөл биелвэл эхний {} хаалтан доторх үйлдэл хийгдэнэ, үгүй бол дараагийн {} хаалтан доторх үйлдлийг хийнэ.

Else-If Chains

else if ашиглан та хэдэн ч нөцөл шалгаж болох цуваа үүсгэж болно.


constconst trafficLight = 'yellow';
var command = '';
if (trafficLight = 'red') {
var command = 'Stop';
} else if (trafficLight == 'yellow') {
command = 'Slow down';
} else if (trafficLight == 'green') {
command = 'Go';
} else {
command = 'INVALID COLOR!';
}
print(command);
                        

Variable Scope


                        const global = 'Hello, world';
                        void main() {
                        const local = 'Hello, main';
                        if (2 > 1) {
                        const insideIf = 'Hello, anybody?';
                        print(gloabl);
                        print(local);
                        print(insideIf);
                        }
                        print(global);
                        print(local);
                        print(insideIf); // Not allowed!
                        }
                        

Дээрх ĸодыг ажиллуулж үзвэл Undefined name 'insideIf' гэсэн алдаа гаргана. Яагаад вэ гэдгийг ойлгохын тулд дараах зүйлсийг ажиглаарай.

  • Нийт гурван хувьсагч байна: global, local, insideIf.
  • Бие биендээ давхар нээгдсэн {} хаалт байна. (nested curly braces). Нэг нь main-ийнх, нөгөө нь if-ийнх байгаа нь харагдаж байна.
  • global хувьсагч нь бүх хаалтнаас гадуур задгай газар зарлагдсан байна. Үүнийг дээд түвшний хувьсагч top-level vairable гэнэ. Ийм төрлийн хувьсагчийг хаанаас ч дуудаж ажиллуулж болдог.
  • local хувьсагч нь main дотор зарлагдсан байна. Энэ хувьсагч зөвхөн main дотор харагдана.
  • Харин insideIf нь if дотор зарлагдсан учир зөвхөн if дотроо л харагдана.

За одоо хамгийн сүүлийн print мөрийг устгаад ажиллуулж үзээрэй.

The Ternary Conditional Operator

if-else дараах товчилсон хэлбэртэй байж болно.


const score = 83;
const message = (score >= 60) ? 'You passed' : 'You failed';
                    

Switch Statements

Урсгалыг удирдах бас нэг арга бол switch (шилжүүлэгч) бөгөөд дараах хэлбэртэй байдаг.


                        switch (vairable) {
                            case value1:
                            // code 1
                            break;
                            case value2:
                            // code 2
                            break;
                            ...
                            default:
                            // code default
                            }
                    

Дээрхийг хүний хэлээр хэлбэл:

variable-ын хувьд утга нь value1 байвал code 1 үйлдлийг хий, харин утга нь value2 байвал code 2 үйлдлийг хий, харин тохирох утга олдоогүй бол code default үйлдлийг хий.

Дараах 2 ĸодыг ажиглана уу:


                        const int number = 3;
                        if(number == 0){
                            print('zero');
                        } else if(number == 1){
                            print('one');
                        } else if(number == 2){
                            print('two');
                        } else if(number == 3){
                            print('three');
                        } else if(number == 4){
                            print('four');
                        } else(){
                            print('something else');
                        }
                    

                       const int number = 3;
                       switch (number){
                        case 0:
                           print('zero');
                           break;
                       }
                       case 1:
                          print('one');
                          break;
                       case 2:
                          print('two');
                          break;
                    

                        case 3:
                           print('three');
                           break;
                        case 4:
                           print('four');
                           break;
                        default:
                           print('something else');
                     

switch мөн String төрөлтэй ажиллаж чаддаг.


                        const weather = 'cloudy';
                        switch (weather){
                            case 'sunny':
                               print('Put on sunscreen.');
                               break;
                            case 'snowy':
                               print('Get your skis.');
                               break;
                            case 'cloudy':
                            case 'rainy':
                               print('Bring an umbrella.');
                               break;
                            default:
                            print("I'm not familiar with that weather.")
                        }
                     

Switching on Enums

Enumerated Types буюу enum төрөл нь switch-тэй маш сайн тохирч ажилладаг. Өмнөх жишээг өөрчилж үзье. enum-ыг дараах байдлаар main-ы гадна зарлаарай.


                            enum Weather {
                                sunny,
                                snowy,
                                cloudy,
                                rainy,
                                }
                        

Урд нь enum гэж бичнэ, нэрийг том үсгээр, харин доторх утгуудыг жижиг үсгээр эсвэл camelCase ашиглаарай.

Одоо switch ашиглая.


                        const weatherToday = Weather.cloudy;
switch (weatherToday) {
case Weather.sunny:
print('Put on sunscreen.');
break;
case Weather.snowy:
print('Get your skis.');
break;
case Weather.cloudy:
case Weather.rainy:
print('Bring an umbrella.');
break;
}
                    

Амархан байгаа биз дээ?

Энэ хүртэл уншаад л лаг юм аа 😊👏