Упражнение. Создание и настройка циклов итерации
- 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
.На панели обозревателя разверните папку CsharpProjects .
Вы увидите папку TestProject и два файла, файл программы C# с именем Program.cs и файл проекта C# с именем TestProject.csproj.
На панели обозревателя выберите Program.cs, чтобы просмотреть файл кода на панели редактора.
Удалите существующие строки кода.
Вы будете использовать этот консольный проект C# для создания, сборки и запуска примеров кода во время этого модуля.
Закройте панель терминала.
Создание основы для инструкции
Убедитесь, что на панели редактора открыт и Program.cs visual Studio Code.
Примечание.
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 и нажмите клавишу ВВОД.
Примечание.
Если появится сообщение "Не удалось найти проект для запуска", убедитесь, что в командной строке терминала отображается ожидаемое расположение папки 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
. - Мы изменили шаблон итератора, чтобы после каждой итерации значение
i
уменьшалось на1
.
Сохраните файл кода и используйте 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
.
Используйте редактор 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
часто применяется для управления способом перебора элементов массива. - Если блок кода имеет только одну строку кода, вы можете исключить фигурные скобки и пробелы, если вы хотите.