Книга: C# для профессионалов. Том II

Цикл for

Цикл for

Давайте теперь рассмотрим странный синтаксис цикла for. Этот цикл является эквивалентом C# для следующего кода VB:

Integer I
For I = 1 То 3
 listBox1.Items.Add "Details of the Employee"
Next

Идея цикла For в VB состоит в том, что он начинается с инициализации некоторой переменной — управляющей переменной цикла, и каждый раз при проходе цикла что-то добавляется к управляющей переменной, пока она не превысит конечное значение. Это достаточно полезно, но не дает почти никакой гибкости в работе цикла. Хотя можно изменять значение приращения или даже сделать его отрицательным, используя возможности Step, цикл всегда работает с помощью вычислений, и проверка на выход из цикла всегда происходит по достижении переменной некоторого минимального или максимального значения.

В C# цикл for обобщает эту концепцию. Базовая идея цикла for в C# следующая. В начале цикла что-то делается, на каждом шаге цикла тоже что-то делается, чтобы перейти к следующей итерации, затем, чтобы определить, когда выходить из цикла, выполняется некоторая проверка. Сравнение версий Visual Basic и C# выглядит следующим образом:

  VB C#
В начале цикла Инициализация управляющей переменной цикла Выполнить что-то
Проверка на выход из цикла Не превысила ли переменная цикла некоторого значения? Проверка некоторого условия
В конце каждой итерации Увеличить управляющую переменную цикла Выполнить что-то

Это может выглядеть как-то неопределенно, но зато дает большую гибкость. Например, в C# вместо добавления некоторой величины к управляющей переменной цикла на каждой итерации можно добавлять какое-то число, которое считывается из файла и которое изменяется на каждой итерации. Проверка не должна быть проверкой значения управляющей переменной цикла, это может быть проверка, например, достижения конца файла. Это позволяет при подходящем выборе начального действия, проверки и действия в конце каждой итерации циклу for эффективно выполнять те же задачи, что и любому из циклов VB — For, Foreach, Do и While, или цикл может вообще работать неким экзотическим образом, для которого нет простого эквивалента в VB. Цикл for в C# действительно представляет полную свободу управления циклом в том виде, какой будет необходим для рассматриваемой задачи.

Надо отметить, что C# поддерживает также циклы foreach, do и while для соответствующих ситуаций.

Давайте вернемся к точному синтаксису. Вспомним, что версия C# для приведенного выше цикла for выглядит следующим образом:

for (int I = 0; I < 3; I++) {
 this.listBox1.Items.Add(Employees[I].Name);
 this.listBox1.Items.Add(Employees[I].ToString());
 this.listBox1.Items.Add("");
}

Как можно видеть, инструкция for получает три различные элемента внутри скобок. Эти элементы разделяются точкой с запятой:

? Первый элемент является действием, которое выполняется прямо в начале цикла, чтобы инициализировать цикл. В данном случае объявляется и инициализируется управляющая переменная цикла.

? Следующим элементом является условие, определяющее завершение цикла. В данном случае условие состоит в том, что I должно быть меньше 3. Цикл продолжается, пока это условие будет true, и закончится, как только условие станет false. Условие оценивается в начале каждой итерации, чтобы, если оно окажется false в самом начале, инструкция внутри цикла вообще не выполнялась.

? В третьем элементе находится инструкция, которая выполняется в конце каждой итерации цикла. Циклы Visual Basic всегда работают, увеличивая некоторое число, и это как раз то, что делается в данном случае.

Синтаксис выглядит незнакомым, но после привыкания к нему, можно использовать цикл for очень эффективно. Например, предположим, что необходимо вывести все целые степени 2, которые меньше 4000, в окне списка. Запишем следующий код:

for (int I = 2; I < 4000; I *= 2)
 listBox1.Items.Add(I.ToString());

Такой результат можно получить и в VB, но немного труднее. Для этого конкретного цикла в VB лучше воспользоваться циклом while.

Оглавление книги

Оглавление статьи/книги

Генерация: 0.178. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз