Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
веб.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
933.89 Кб
Скачать

3.2.3 Керування потоком виконання

Оператори, що дозволяють керувати потоком виконання програми, призначені для того, щоб кожна стрічка коду не виконувалася так, як вона розміщена в програмі. Для цього використовуються умовні оператори, цикли та оператори переходу.

 

Умовні оператори

Умовні оператори дозволяють організувати розгалуження коду в залежності від певних умов або значення виразів. У С # є дві конструкції, призначені для цієї мети: оператор if, який дозволяє перевірити деяку умову, і оператор switch, що дозволяє порівняти вираз з безліччю різних значень.

Оператор if

Для організації умовного розгалуження в мові С # використовується конструкція if. . . еlse. Її синтаксис наведено нижче:

if (умова)

оператор (оператори)

else

оператор (опера тори)

Якщо на кожну з умов потрібно виконати більше одного оператора, ці оператори повинні бути об'єднані в блок за допомогою фігурних дужок ({...}). (Це також сточується циклів). Фігурні дужки застосовувати не обов'язково, якщо в умовній гілки присутній тільки один оператор.

 

bool isZero;

if (i == 0)

{

isZero = true;

Console .WriteLine ("i рівне нулю");

}

else

{

isZero = false;

Console .WriteLine ("i не рівне нулю");

}

У С # вираження в конструкції if має повертати булеве значення. В С # оператор if не може перевіряти цілі значення (скажімо, повернуті функцією) безпосередньо.

Оператор if можна використовувати без фінальної конструкції else. Можна також комбінувати else if, щоб перевіряти безліч умов. Кількість else if, що додаються до єдиного if, не обмежена.

Оператор switch

Оператор switch. . . case підходить для вибору з метою виконання однієї гілки з безлічі взаємовиключних гілок. Оператор має форму switch з аргументом, за яким слідує послідовність конструкцій case. Коли значення вираження аргументу switch збігається з виразом, наступним за одним з case, то негайно виконується код, наступний за цією конструкцією case. Кінець кожного блоку позначається словом break. У оператор switch можна також включити гілку default, яка буде виконана, якщо жоден з випадків case не підійде.

switch (integerA)

{

case 1:

Console.WriteLine("integerA = 1");

break;

case 2:

Console.WriteLine("integerA = 2");

break;

case 3:

Console.WriteLine("integerA = 3");

break;

default:

Console.WriteLine("integerA не рівне 1,2 або 3");

break;

}

Значення, вказані після case, повинні бути константними виразами; змінні не допускаються. Порядок проходження різних конструкцій case не має значення. Можна навіть першою вказати гілку default. Як наслідок, наявність двох однакових значень case НЕ допускається. Це відноситься до різних констант з однаковими значеннями.

Коли між однією конструкцією case і іншою немає ніякого коду, це дозволяє трактувати два або більш case однаковим чином, тобто:

switch(country)

{

case "au":

case "uk":

case "us":

language = "English";

break;

case "at":

case "de":

language = "German";

break;

}

 

Цикли

У С # є чотири різних види циклів (for, while, do ... while і foreach), які дозволяють виконувати блок коду повторно до тих пір, поки задовольняється певна умова.

Цикл for

Цикл for в С # надає механізм ітерації, в якому певна умова перевіряється перед виконанням кожної ітерації. Синтаксис цього оператора показаний нижче:

for (ініціалізатор; умова; ітератор)

оператор (оператори)

Тут:

        ініціалізатор - вираз, що обчислюється перед першим виконанням тіла циклу (Зазвичай ініціалізація локальної змінної в якості лічильника циклу);

        умова - вираз, що перевіряється перед кожною новою ітерацією циклу (повинен повертати true, щоб була виконана наступна ітерація);

        ітератор - вираз, що обчислюється після кожної ітерації (зазвичай приріст значення лічильника циклу).

Ітерації припиняються, коли обчислення умови дає false. Цикл for відноситься до циклів з передумовою. Цикл for відмінно підходить для повторного виконання оператора або блоку операторів заздалегідь відому кількість разів. Нерідко виникає необхідність у вкладених циклах for, коли внутрішній цикл for повністю виконується на кожному кроці зовнішнього циклу for.

Цикл while

Подібно до for, while також є циклом з попередньою перевіркою. Синтаксис його аналогічний, але цикли while включають тільки один вираз:

while (умова)

оператор (оператори);

На відміну від for, цикл while частіше використовується для заздалегідь невідомої кількості повторних виконань оператора або блоку операторів. Зазвичай оператор всередині тіла циклу while на певному кроці ітерації встановлює значення булівського прапорця в false, що викликає завершення циклу.

Цикл do... while

Цикл do... while в С # - це версія while з післяумовою. Це означає, що умова циклу перевіряється після виконання тіла циклу. Отже, цикли do...while зручні в тих ситуаціях, коли блок операторів повинен бути виконаний як мінімум один раз.

Цикл foreach

Цикл foreach дозволяє проходити по кожному елементу колекції. Колекція - це об'єкт, що представляє список інших об'єктів. Формально для того, щоб щось можна було розглядати як колекцію, це щось повинно підтримувати інтерфейс IEnumerable. Прикладами колекцій можуть служити

масиви С #, класи колекцій з простору імен System. Collection, а також користувацькі класи колекцій. Ідею синтаксису foreach можна розуміти з наведеного нижче коду, якщо припустити, що arrayOf Ints - масив цілих чисел:

foreach (int temp in arrayOflnts)

{

Console.WriteLine(temp);

}

Важливий момент, який слід відзначити відносно foreach - те, що не можна змінити значення елементу колекції. Якщо є необхідність пройтися по елементах колекції і змінювати їх значення, то треба застосовувати цикл for.

 

Оператори переходу

Мова С # пропонує кілька операторів, що дозволяють негайно перейти на інший рядок програми.

Оператор goto

Оператор goto дозволяє перейти безпосередньо на інший рядок програми, помічений міткою (яка являє собою просто ідентифікатор з двокрапкою):

goto Labell;

Console.WriteLine ("Це не буде виконано");

Labell:

Console.WriteLine ("Продовження виконання");

З оператором goto пов'язано безліч обмежень. Не допускається переходити всередину блоку коду, такого як тіло циклу for, не можна залишати клас, не дозволяється виходити з блоку finally, наступного за блоками try...

Репутація оператора goto така, що в більшості випадків його застосування категорично засуджується. Він не вписується в рамки гарної практики об'єктно-орієнтованого програмування.

Оператор break

Фактично, break використовується для виходу з циклів for, foreach, while і do...while, виходу з case всередині switch. При цьому управління передається

оператору, одразу наступного за кінцем циклу. Якщо цей оператор зустрічається у вкладеному циклі, то управління передається за межі самого глибоко вкладеного з них.

Оператор continue

Оператор continue подібний break і також повинен застосовуватися тільки всередині циклів for, foreach, while або do... while. Однак при цьому він перериває лише поточну ітерацію циклу, тобто виконання триває з початку наступної ітерації, а не з першого оператора за кінцем циклу.

Оператор return

Оператор return застосовується для виходу з методу класу, повертаючи управління кодом, який викликав цей метод. Якщо для методу зазначений тип повернення, оператор return повинен повертати значення цього типу. В іншому випадку, якщо метод повертає void, необхідно використовувати return без подальшого виразу.

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]