/ Control Flow /
Программ бичих явцад нөхцөл байдал хэрхэн өрнөхийг тохиолдол бүрт тооцох хэрэгтэй болдог. Жишээ нь тооны машины апп байлаа гэж бодоход хэрэглэгч нэмэх товч дарвал ингэнэ, хасах товч дарвал тэгнэ гэх мэтээр программыг тухайн тооцооллыг хийх үйлдэлрүү чиглүүлдэг. Программчлалын хэлэнд үүнийг Control Flow хэмээдэг.
Бид Dart хэлний int, double, String гэсэн төрлүүдтэй хэдийн танилцсан билээ. Эдгээр төрлүүд дотроо ямар нэг өгөдлийг агуулдаг бөгөөд тэр өгөгдлийг ижил төрлийн өгөгдлөөр сольж болдог. Харин үүнээс гадна тийм-үгүй гэж хариулж болох өгөдлийн төрөл бас байдаг.
Dart хэлэнд зөвхөн ийм хариултыг хадгалах зориулалттай төрөл байдаг. Тэрийг Boolean гэх ба bool гэж тэмдэглэнэ. Утга нь зөвхөн true эсвэл false байх боломжтой. За ингээд bool хувьсагч зарлаж үзэцгээе.
const bool answerYes = true;
const bool answerNo = false;
Хэрвээ type inference-ийг санаж байгаа бол bool гэж бичихгүй ч байж болно.
const answerYes = true;
const answerNo = false;
Тэнцүү эсэхийг шалгах
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);
Заримдаа ямар нэгэн үйлдэл хийхэд хэд хэдэн нөхцөл бүрдэж байж боломжтой болдог. Жишээ нь Болд маргааш найз Чимэгээтэй хамт дугуй унамаар байлаа гэж бодъё. Чимгээ гэрийн даалгавар ихтэй байгаа гэж хэлсэн. Бас бороо орж магадгүй үүлэрхэг байгаад байдаг. Тэгэхээр дараах 2 нөхцөл БҮГД биелж байж маргааш сайхан зугаалах боломжтой болно.
Аль нэг нөхцөл биелээгүй тохиолдолд зугаалга худлаа болно.
За одоо дээрх жишээг программчилж үзье:
const isSunny = true;
const isFinished = true;
const willGoCycling = isSunny && isFinished;
print(willGoCycling );
Аль нэгийг худал болгоод ажиллуулаад үзээрэй.
Зарим тохиолдолд хэд хэдэн нөхцлийн аль нэг л биелэхэд хангалттай байж болно. Жишээ нь Чимэгээ имжний зураг зурах даалгавар авчээ. Имж яаж харагддагийг сайн мэдэхгүй учир Австрали явж амьдаар нь харж болно. Эсвэл хэн нэгний авсан фото зураг байвал харж байгаад зурж чадна. Тэгэхээр дараах 2 нөхцлийн АЛЬ НЭГ л биелэхэд Чимэгээ зурагаа зурна.
const willTravelToAustralia = true;
const canFindPhoto = false;
const canDrawKangaroo = willTravelToAustralia || canFindPhoto;
Хэд хэдэн нөхцөл шалгах бол яах вэ?
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 ажилдаа орцгооё!
Програмын урсгалыг хянах хамгийн анхан шатны бөгөөд хамгийн түгээмэл арга бол if мэдэгдэл ашиглах явдал юм. Энэ нь зөвхөн тодорхой нөхцөл үнэн байгаа тохиолдолд програмыг ямар нэгэн зүйл хийх боломжийг олгодог.
if (2 > 1) {
print('Yes, 2 is grater than 1.');
}
Хэрэв 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 ашиглан та хэдэн ч нөцөл шалгаж болох цуваа үүсгэж болно.
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);
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' гэсэн алдаа гаргана. Яагаад вэ гэдгийг ойлгохын тулд дараах зүйлсийг ажиглаарай.
За одоо хамгийн сүүлийн print мөрийг устгаад ажиллуулж үзээрэй.
if-else дараах товчилсон хэлбэртэй байж болно.
const score = 83;
const message = (score >= 60) ? 'You passed' : 'You failed';
Урсгалыг удирдах бас нэг арга бол 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.")
}
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;
}
Амархан байгаа биз дээ?