Внутренний язык программирования 1С 8.3 для начинающих программистов: циклы в 1С часть 3
Автор уроков и преподаватель школы: Владимир Милькин
Друзья, вы помните урок, в котором мы рассматривали цикл Для? Тогда я намеренно не стал рассказывать об особой форме этого цикла. Она используется только для обхода коллекций, например, массивов и списков значений.
Теперь, когда мы уже знаем что такое коллекция и для чего она нужна - время пришло.
Оглавление
Цикл Для Каждого
Конструкция цикла выглядит вот так:
Для Каждого Имя Из ИмяКоллекции Цикл Команда1(); Команда2(); ... КонецЦикла; |
Команды, заключенные между словами Цикл и КонецЦикла называются телом цикла и выполняются столько раз, сколько элементов содержит в себе коллекция.
При этом Имя программист придумывает сам и с этим именем связывается значение очередного элемента коллекции. Сейчас разберем на примере и всё станет ясно.
Предположим, что у нас есть такой массив:
Числа = Новый Массив; Числа.Добавить(128); Числа.Добавить(256); Числа.Добавить(512); |
И мы хотим написать цикл, который выводит элементы этого массива от первого до последнего.
Сначала давайте напишем такой обход при помощи обычного цикла Для:
Для Шаг = 0 По Числа.Количество() - 1 Цикл Сообщить(Числа[Шаг]); КонецЦикла; |
Да, этот код хорош, но в нём легко допустить ошибку, например:
- мы можем по ошибке указать в качестве начального значения цикла не 0, а 1
- мы можем забыть отнять 1 от количества для верного определения индекса последнего элемента
И это будет очень коварная ошибка, так как программист (из-за замыливания глаза) сможет долго не замечать и не находить её.
Именно поэтому и был придуман цикл Для Каждого, который используется только для обхода коллекций от первого элемента к последнему.
Вот как будет выглядеть обход нашего массива при помощи цикла Для Каждого:
Для Каждого Элемент Из Числа Цикл Сообщить(Элемент); КонецЦикла; |
Вы видите, что для обхода коллекции от первого до последнего элемента запись этого цикла более лаконична и ошибиться здесь очень трудно.