Вправа – створення та настроювання циклів ітерації
- 14 хвилин
На поверхні інструкція є ще одним ітераційним оператором, for який дозволяє ітерувати через блок коду і тим самим змінювати потік виконання коду. Однак, як тільки ми розглянемо, як кожен працює, ми можемо краще визначити нюанси кожного ітераційного положення і коли їх використовувати.
Що таке for твердження?
Оператор for ітералює через блок коду певну кількість разів. Цей рівень керування робить for оператор унікальним серед інших ітерацій. Інструкція foreach проходить через блок коду один раз для кожного елемента в послідовності даних, наприклад масиву або колекції. Інструкція while виконується через блок коду, доки не буде виконано умову.
Крім того, інструкція for надає набагато більше контролю над процесом ітерації, викриваючи умови ітерації.
У цій вправі ви скористаєтеся інструкцією for , щоб навчитися керувати попередньою умовою ітерації, станом завершення, шаблоном ітерації тощо. Крім того, ви дізнаєтеся про поширені випадки використання для for інструкції.
Гаразд, тепер давайте підготуємо наше середовище кодування та почнемо нашу експертизу зразків коду, які реалізують for твердження.
Підготовка середовища кодування
Цей модуль містить практичні дії, які допоможуть вам побудувати та запустити демонстраційний код. Ми рекомендуємо вам виконати ці дії, використовуючи Visual Studio Code як середовище розробки. Використання коду Visual Studio для цих дій допоможе вам стати більш зручним написанням і виконанням коду в середовищі розробників, яке використовують професіонали по всьому світу.
Відкрийте Код Visual Studio.
Щоб відкрити код Visual Studio, можна скористатися меню "Пуск" Windows (або еквівалентним ресурсом для іншої ОС).
У меню Код Visual Studio Файл виберіть Відкрити папку.
У діалоговому вікні Відкрити папку перейдіть до папки "Робочий стіл Windows".
Якщо у вас є інше розташування папки, де зберігаються проекти коду, натомість можна використовувати це розташування папки. Для цього навчання важливо мати розташування, яке легко знайти та запам'ятати.
У діалоговому вікні Відкрити папку виберіть Вибрати папку.
Якщо з'явиться діалогове вікно безпеки з запитанням, чи довіряєте ви авторам, виберіть Так.
У меню коду Visual Studio Code виберіть Новий термінал.
Зверніть увагу, що в командному рядку на панелі терміналів відображається шлях до папки для поточної папки. Наприклад:
C:\Users\someuser\Desktop>Примітка
Якщо ви працюєте на власному ПК, а не в ізольованому середовищі або в розміщеному середовищі, а завершили інші модулі Microsoft Learn у цій серії C# , можливо, ви вже створили папку проекту для зразків коду. У такому разі можна пропустити наступний крок, який використовується для створення консолі в папці TestProject.
У командному рядку термінала, щоб створити нову програму консолі в указаній папці, введіть такий запит:
dotnet new console -o ./CsharpProjects/TestProjectЦя команда .NET CLI використовує шаблон програми .NET для створення нового проекту програми консолі C# у вказаному розташуванні папки. Ця команда створює папки CsharpProjects і TestProject і використовує TestProject як ім'я
.csprojфайлу.Якщо відображається повідомлення про те, що файли вже існують, виконайте наступні кроки. Ви повторно використовуватимете наявні файли проекту.
У поданні EXPLORER розгорніть папку CsharpProjects .
Має відобразитися папка TestProject і два файли, файл програми C# з іменем Program.cs і файл проекту C# з іменем TestProject.csproj.
У меню Код Visual Studio Файл виберіть Відкрити папку.
У діалоговому вікні Відкрити папку виберіть папку CsharpProjects , а потім натисніть кнопку Вибрати папку.
У поданні EXPLORER розгорніть папку TestProject і виберіть Program.cs.
Видалення наявних рядків коду.
Ви використовуватимете цей проект консолі C# для створення, створення та виконання зразків коду під час цього модуля.
Закрийте панель терміналів.
Створення базового для інструкції
Переконайтеся, що на панелі "Редактор" відкрито код Visual Studio Code і Program.cs.
Примітка
Program.cs має бути пустим. Якщо це не так, виберіть і видаліть усі рядки коду.
Введіть наведений нижче код у редактор коду Visual Studio.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }У цьому коді представлено просту
forінструкцію, яка циклічна через блок коду 10 разів друкує поточнеiзначення .У меню Файл код Visual Studio Code виберіть Зберегти.
Перед створенням або запуском коду необхідно зберегти файл Program.cs.
На панелі EXPLORER, щоб відкрити термінал у розташуванні папки TestProject, клацніть правою кнопкою миші TestProject , а потім виберіть Відкрити в інтегрованому терміналі.
Відкриється панель терміналів. Термінал має містити командний рядок, який показує, що термінал відкрито в папці TestProject.
У командному рядку термінала, щоб запустити код, введіть dotnet виконати і натисніть клавішу Enter.
Примітка
Якщо відображається повідомлення "Не вдалося знайти проект для запуску", переконайтеся, що в командному рядку термінала відображається очікуване розташування папки TestProject. Наприклад:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Ви побачите наведений нижче результат.
0 1 2 3 4 5 6 7 8 9Щоб визначити шість частин інструкції, знадобиться хвилина
for.Інструкція
forмістить такі шість частин:- Ключове слово
for. - Набір дужок, який визначає умови
forітерації. Дужки містять три окремі частини, розділені крапкою з комою в кінці оператора. - Перша частина визначає та ініціалізує змінну ітератора. У цьому прикладі:
int i = 0. Цей розділ називається ініціалізатором. - Друга частина визначає умову завершення. У цьому прикладі:
i < 10. Іншими словами, середовище виконання продовжуватиме ітерувати над кодом у блоці коду під операторомfor, аiменше10. Колиiвін дорівнює10, середовище виконання припиняє виконуватиforблок коду оператора. У документах цей розділ називається умовою. - Третя частина визначає дію, яку потрібно виконати після кожної ітерації. У такому разі після кожної
i++ітераціїiзначення буде збільшитися на 1. Документи називають цей розділ ітератором. - Нарешті, блок коду. Блок коду містить код, який виконуватиметься для кожної ітерації. Зверніть увагу, що на значення
iміститься посилання всередині блоку коду. Документи називають цей розділ основною.
З огляду на наші правила іменування змінних, ви можете задатися питанням, чи
iє припустиме ім'я змінної, яка містить поточну ітерацію. У цьому випадкуiбільшість вважається припустимим. Інші популярні варіанти:xіcounter. Ім'яjтакож використовується в таких ситуаціях, коли у вас є зовнішняforінструкція, яка використовуєi, і потрібно створити змінну ітерації для внутрішньогоforоператора.Примітка
Усі три розділи (ініціалізатор, умова та ітератор) необов'язкові. Проте на практиці зазвичай використовуються всі три розділи.
- Ключове слово
Змінення умов ітерації
Як ми вже писали з самого початку, for заява має дві унікальні якості серед ітераційних заяв.
- Інструкцію
forслід використовувати, коли ви знаєте, скільки разів потрібно ітерувати через блок коду заздалегідь. - Інструкція
forдає змогу керувати способом обробки кожної ітерації.
Що робити, якщо нам потрібно ітерувати через блок коду, але потрібно відрахувати, а не підрахувати?
Скористайтеся редактором коду Visual Studio, щоб оновити код, як показано нижче.
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Знайдіть хвилинку, щоб переглянути оновлений код.
Змінюючи три частини
forінструкції, ми змінюємо її поведінку.- Ми ініціалізуємо змінну ітерації до 10.
- Ми змінюємо умову завершення, щоб вийти з виписки,
forякщоiвона менша за0. - Змінюється шаблон ітератора на віднімання
1відiкожного завершення ітерації.
Збережіть кодовий файл, а потім за допомогою коду Visual Studio запустіть код.
Введіть у
dotnet runкомандному рядку термінала, щоб запустити код.Зверніть увагу, що результат змінився.
Коли ви запустите код, ви побачите наведений нижче результат.
10 9 8 7 6 5 4 3 2 1 0
Експериментуйте з візерунком ітератора
Що робити, якщо ми хотіли б пропустити минулі певні значення в змінній ітератора?
Скористайтеся редактором коду Visual Studio, щоб оновити код, як показано нижче.
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Знайдіть хвилинку, щоб переглянути оновлений код.
Замість інкрементування або декрементації значення змінної ітератора ми використовуємо
1i += 3, щоб пропустити два значення після кожної ітерації.Збережіть кодовий файл, а потім за допомогою коду Visual Studio запустіть код.
Введіть у
dotnet runкомандному рядку термінала, щоб запустити код.Зверніть увагу на те, як вивід змінився.
Коли ви запустите код, ви побачите наведений нижче результат.
0 3 6 9Звичайно, ви не будете робити такого роду речі часто, але, сподіваюся, ви можете оцінити, що у вас є дрібнозернистий рівень контролю над ітераціями, якщо вам це потрібно.
Використання ключового слова розриву для розриву ітерації
Що робити, якщо нам потрібно передчасно вийти з ітерації на основі якоїсь умови? Ми можемо використовувати ключове break слово.
Скористайтеся редактором коду Visual Studio, щоб оновити код, як показано нижче.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Знайдіть хвилинку, щоб переглянути використання ключового слова в оновленому
breakкоді.Вперше ключове слово в
breakмодулі "Розгалуження потоку коду за допомогою конструктора switch-case в C#". Як виявляється, ми можемо використовувати ключовеbreakслово, щоб вийти з ітераційних інструкцій, а також.Збережіть кодовий файл, а потім за допомогою коду Visual Studio запустіть код.
Введіть у
dotnet runкомандному рядку термінала, щоб запустити код.Зверніть увагу на те, як вивід змінився.
Коли ви запустите код, ви побачите наведений нижче результат.
0 1 2 3 4 5 6 7
Циклія кожного елемента масиву
Зазвичай for інструкція полягає в тому, щоб ітерувати через масив елементів, особливо якщо вам потрібен певний контроль над способом, у який відбувається ітерація.
foreach Хоча ітеративи через кожен елемент масиву, інструкція for може бути налаштована, щоб забезпечити більше настройок.
Скористайтеся редактором коду Visual Studio, щоб оновити код, як показано нижче.
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }Знайдіть хвилинку, щоб переглянути оновлений код.
Спочатку зверніть увагу, що ми створили масив
namesрядків із чотирма іменами.Потім зверніть увагу, що ми використовуємо
Array.Lengthвластивість, щоб отримати кількість елементів у масиві, і що ми використовуємо це значення для ініціалізації нашої змінної ітератора (int i = names.Length - 1). Віднімаємо 1 від значення, тому що номер індексу для елементів масиву дорівнює нулю (індексні числа чотирьох елементів – 0–3).Нарешті, зверніть увагу, що ми вибрали ітерації через масив назад - те, що ми не можемо зробити з інструкцією
foreach. Ми використовуємо значення змінної ітерації всередині блоку коду, щоб указати номер індексу елементів масиву (names[i]).Збережіть кодовий файл, а потім за допомогою коду Visual Studio запустіть код.
Введіть у
dotnet runкомандному рядку термінала, щоб запустити код.Зверніть увагу, що елементи масиву відображаються у зворотному порядку (за призначенням).
Коли ви запустите код, ви побачите наведений нижче результат.
Michael David Eddie AlexПримітка
Ми могли б ітерувати вперед через елементи масиву, створюючи інструкцію
forв такий спосіб:for (int i = 0; i < names.Length; i++).
Перевірте обмеження оператора foreach
Що робити, якщо потрібно оновити значення в масиві під час foreach ітерації?
Скористайтеся редактором коду Visual Studio, щоб оновити код, як показано нижче.
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }Збережіть кодовий файл, а потім за допомогою коду Visual Studio запустіть код.
Введіть у
dotnet runкомандному рядку термінала, щоб запустити код.Зверніть увагу на повідомлення про помилку, яке відображається.
Якщо спробувати скомпілювати та запустити цей код, відобразиться виняток.
Cannot assign to name because it is a 'foreach iteration variable'Іншими словами, не можна перепризначити значення
name, оскільки воно є частиноюforeachвнутрішньої реалізації ітерації.
Подолання обмеження оператора foreach за допомогою інструкції
Спробуємо змінити вміст масиву в блоці коду ітерації за допомогою for інструкції.
Скористайтеся редактором коду Visual Studio, щоб оновити код, як показано нижче.
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) if (names[i] == "David") names[i] = "Sammy"; foreach (var name in names) Console.WriteLine(name);Знайдіть хвилинку, щоб переглянути оновлений код.
Зверніть увагу, що ми видалили фігурні дужки з блоків коду, які містили лише один рядок коду. У цій редакції використовується той самий метод, про який ми говорили в модулі "Керування змінною областю та логікою за допомогою блоків коду в C#". Багато розробників вважають цей стиль складним для читання, а інші вважають за краще цей скорочений стиль, тому що він допомагає їм писати більш лаконічно і виразніше. Якщо цей код складно прочитати або ви просто не віддаєте перевагу цьому стилю, будьте впевнені, що фігурні дужки завжди можна використовувати в блоках коду. За потреби оновіть код на панелі "Редактор" таким кодом:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) { if (names[i] == "David") { names[i] = "Sammy"; } } foreach (var name in names) { Console.WriteLine(name); }Збережіть кодовий файл, а потім за допомогою коду Visual Studio запустіть код.
Введіть у
dotnet runкомандному рядку термінала, щоб запустити код.Зверніть увагу, що код запускається без помилок і створює бажаний результат.
Коли ви запустите код, ви побачите наведений нижче результат.
Alex Eddie Sammy MichaelОскільки масив не входить безпосередньо до складу ітераційного інструкції, ви можете змінити значення в масиві.
Повторити введення
Ось кілька виносів з цієї одиниці:
- Оператор
forітерації дає змогу ітерувати через блок коду певну кількість разів. - Інструкція
forітерації дає змогу керувати кожним аспектом механіки ітерації, змінюючи три умови в дужках: ініціалізатор, умову та ітератор. - Інструкцію
forчасто можна використовувати, якщо потрібно керувати тим, як потрібно ітерувати кожний елемент у масиві. - Якщо блок коду має лише один рядок коду, за потреби можна видалити фігурні дужки та пробіли.
Перевірка знань
Зворотний зв’язок
Чи була ця сторінка корисна?
Ні
Потрібна допомога із цією темою?
Хочете скористатися Ask Learn, щоб отримати пояснення чи інструкції із цієї теми?