Компонентный подход в программировании


         

Второй цикл сначала выполняет свое


Второй цикл сначала выполняет свое тело, а потом проверяет условие.

  • Цикл for в обоих языках заимствован из языка C.

    for(A; B; C) statement Ag

    выполняется практически как

    A; while(B) { statement C; } Ag

    Любой из элементов A, B, C может отсутствовать, B должно быть выражением логического типа (при отсутствии оно заменяется на true), A и С должны быть наборами выражений (A может включать и декларации переменных), разделенных запятыми.

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



    В Java синтаксис цикла перебора элементов коллекции такой:

    for ( finalopt type id : expression ) statement

    При этом выражение expression должно иметь тип java.lang.Iterable или тип массива.

    В первом случае такой цикл эквивалентен следующему (T далее обозначает тип результат метода iterator() у expression, v — нигде не используемое имя).

    for(T v = expression.iterator(); v.hasNext(); ) { finalopt type id = v.next(); statement }

    Во втором случае, когда expression — массив типа T[], эта конструкция эквивалентна следующей (a, i — нигде не используемые имена)

    T[] a = expression; for(int i = 0; i < a.length; i++) { finalopt type id = v.next(); statement }



    В C# синтаксис цикла перебора элементов коллекции такой:

    foreach ( type id in expression ) statement

    Выражение expression должно быть массивом, или иметь тип System.Collections.IEnumerable или System.Collections.Generic.IEnumerable <T>, или же его тип должен иметь метод GetEnumerator(), результат которого, в свою очередь, должен иметь свойство Current и метод MoveNext().

    Тип результата метода GetEnumerator() во всех случаях, кроме массива, называется типом итератора (enumerator type). Тип свойства Current, которое имеется у типа итератора, должен совпадать с type.

    Пусть тип итератора E, а e — неиспользуемое имя. Тогда приведенная конструкция, с точностью до некоторых деталей, эквивалентна следующей.

    E e = expression.GetEnumerator(); while(e.MoveNext()) { type id = (type)e.Current; statement }

    Опущенные детали касаются освобождения ресурсов, используемых итератором (см. далее описание инструкции using).



    Пример использования перебора элементов коллекции:



    Пример использования перебора элементов коллекции:



    public class A { public static void main(String[] args) { int i = 1; for(String s : args) System.out.println((i++) + "-th argument is " + s); } }



    using System;

    public class A { public static void Main(string[] args) { int i = 1; foreach (string s in args) Console.WriteLine((i++) + "-th argument is " + s); } }
    <

    Содержание  Назад  Вперед