Упражнение. Создание и настройка циклов итерации
- 14 минут
На поверхности оператор for является еще одним оператором итерации, который позволяет выполнять итерацию по блоку кода и таким образом изменять поток выполнения кода. Однако после изучения того, как работает каждый из них, мы можем лучше определить нюансы каждой итерационной конструкции и когда их использовать.
Что такое for утверждение?
Оператор for выполняет итерацию по блоку кода определенное количество раз. Этот уровень управления делает for операцию особенной среди других операций итерации. Инструкция foreach выполняет итерацию по блоку кода один раз для каждого элемента в последовательности данных, таких как массив или коллекция. Оператор while повторяет выполнение блока кода до тех пор, пока не будет выполнено условие.
Кроме того, инструкция for обеспечивает гораздо больше контроля над процессом итерации путем предоставления условий итерации.
В этом упражнении вы будете использовать инструкцию for , научитесь управлять предварительным условием итерации, условием завершения, его шаблоном итерации и т. д. Кроме того, вы узнаете о распространенных вариантах использования инструкции for .
Теперь давайте подготовим среду кодирования и начнем изучение примеров кода, реализующих инструкцию for .
Подготовка среды программирования
Этот модуль включает практические действия, которые помогут вам в процессе создания и выполнения демонстрационного кода. Мы рекомендуем выполнить эти действия с помощью Visual Studio Code в качестве среды разработки. Использование Visual Studio Code для выполнения этих задач поможет вам стать более уверенным в написании и выполнении кода в среде разработки, которая используется профессионалами по всему миру.
Откройте Visual Studio Code.
Для открытия Visual Studio Code можно использовать меню Windows (или эквивалентный ресурс для другой ОС).
В меню Visual Studio Code "Файл" выберите "Открыть папку".
В диалоговом окне "Открыть папку " перейдите в папку "Рабочий стол 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 Code "Файл" выберите "Открыть папку".
В диалоговом окне "Открыть папку " выберите папку CsharpProjects и выберите "Выбрать папку".
В представлении EXPLORER разверните папку TestProject и выберите Program.cs.
Удалите существующие строки кода.
Вы будете использовать этот консольный проект C# для создания, сборки и запуска примеров кода во время этого модуля.
Закройте панель терминала.
Создание основы для инструкции
Убедитесь, что у вас открыт Visual Studio Code и в панели редактора отображается файл Program.cs.
Замечание
Program.cs должно быть пустым. Если нет, выберите и удалите все строки кода.
Введите следующий код в редактор Visual Studio Code.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }Этот код представляет простую
forинструкцию, которая выполняет цикл по блоку кода 10 раз, выводя текущее значениеi.В меню Файл в Visual Studio Code выберите Сохранить.
Перед созданием или выполнением кода необходимо сохранить файл Program.cs.
На панели обозревателя откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале".
Откроется панель терминала. Терминал должен содержать командную строку, показывающую, что терминал открыт для расположения папки TestProject.
В командной строке терминала, чтобы запустить код, введите команду dotnet run и нажмите клавишу 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 Code для обновления кода следующим образом:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Пройдите минуту, чтобы просмотреть обновленный код.
Изменив три части инструкции
for, мы изменим его поведение.- Инициализируем переменную итерации в 10.
- Мы изменяем условие завершения, чтобы прекращать выполнение инструкции
for, когдаiменьше0. - Мы изменяем шаблон итератора, чтобы вычитать
1изiкаждый раз, когда мы завершаем проход.
Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание, что выходные данные изменились.
При запуске кода вы увидите следующие выходные данные.
10 9 8 7 6 5 4 3 2 1 0
Эксперимент с шаблоном итератора
Что делать, если мы хотели пропустить мимо определенных значений в переменной итератора?
Используйте редактор Visual Studio Code для обновления кода следующим образом:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Пройдите минуту, чтобы просмотреть обновленный код.
Вместо увеличения или уменьшения значения переменной
1итератора мы используемi += 3для пропуска двух значений после каждой итерации.Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание на изменение выходных данных.
При запуске кода вы увидите следующие выходные данные.
0 3 6 9По общему признанию, вы не будете делать это часто, но, надеюсь, вы можете оценить, что у вас есть точный уровень контроля над итерациями, если вы когда-либо нуждаетесь в нем.
Используйте ключевое слово break для прерывания операции итерации
Что делать, если нам нужно выйти из оператора итерации преждевременно на основе какого-то условия? Мы можем использовать ключевое break слово.
Используйте редактор Visual Studio Code для обновления кода следующим образом:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Просмотрите использование ключевого
breakслова в обновленном коде.Мы впервые увидели
breakключевое слово в модуле "Разветвление потока кода с помощью конструкции switch-case в C#". Как оказалось, мы можем также использовать ключевое словоbreakдля выхода из операторов итерации.Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание на изменение выходных данных.
При запуске кода вы увидите следующие выходные данные.
0 1 2 3 4 5 6 7
Цикл по каждому элементу массива
Обычное использование for инструкции заключается в итерации через элементы массива, особенно если вам нужен некоторый контроль над процессом итерации.
foreach хотя итерирует все элементы массива, инструкцию for можно настроить для предоставления более точных настроек.
Используйте редактор Visual Studio Code для обновления кода следующим образом:
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 Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание, что элементы массива перечислены в обратном порядке (как мы уже планировали).
При запуске кода вы увидите следующие выходные данные.
Michael David Eddie AlexЗамечание
Мы могли бы перебирать элементы массива, создав инструкцию
forследующим образом:for (int i = 0; i < names.Length; i++).
Ознакомьтесь с ограничениями оператора foreach
Что делать, если вы хотите обновить значение в массиве foreach во время итерации?
Используйте редактор Visual Studio Code для обновления кода следующим образом:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание на сообщение об ошибке, отображаемое.
Если вы пытаетесь скомпилировать и запустить этот код, вы увидите исключение.
Cannot assign to name because it is a 'foreach iteration variable'Другими словами, нельзя переназначить значение
name, так как оно является частьюforeachвнутренней реализации итерации.
Преодоление ограничения инструкции foreach с помощью инструкции for
Давайте попробуем использовать for инструкцию для изменения содержимого массива в итерационном блоке кода.
Используйте редактор Visual Studio Code для обновления кода следующим образом:
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 Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание, что код выполняется без ошибок и создает нужные выходные данные.
При запуске кода вы увидите следующие выходные данные.
Alex Eddie Sammy MichaelТак как массив не является непосредственно частью реализации инструкции итерации, можно изменить значения внутри массива.
Обзор
Ниже приведены некоторые из основных выводов из этого раздела:
- Оператор
forитерации позволяет выполнять итерацию по блоку кода определенное количество раз. - Оператор
forитерации позволяет управлять каждым аспектом механики итерации путем изменения трех условий внутри круглых скобок: инициализатора, условия и итератора. - Обычно используется инструкция
for, когда необходимо управлять тем, как осуществляется итерация элементов в массиве. - Если блок кода имеет только одну строку кода, вы можете исключить фигурные скобки и пробелы, если вы хотите.