Страницы: 1
RSS
Зачем в VBA столько разновидностей циклов?
 
Добрый день
Начал разбираться (теоретически) с циклами VBA. Возник вопрос зачем их столько видов (7 вариантов, по имеющейся у меня информации)?
Как я понял, например, циклы Do While.. Loop и Do Until … Loop - один из них "явно" "лишний", с помощью оператора Not (Не) один "превращается" в другой (функционально)... Один из них можно было бы и не "добавлять" в язык VBA...
То же самое с Do …  Loop While и Do …  Loop Until
Также, предполагаю, While … Wend и Do While … Loop (While … Wend можно было бы и не "добавлять" в язык VBA, т.к. есть аналогичный Do While … Loop, у которого есть принудительный выход из цикла Exit, следовательно его возможности шире?)
Создал такой список "нужных" циклов для себя:
1. For … Next
2. For Each … Next
3. Do While … Loop
4. Do …  Loop While
И "избыточных", но все равно нужных для меня, т.к. в чужих кодах они встречаются и нужно понимать их:
1. Do Until … Loop
2. Do …  Loop Until
3. While … Wend
Но так как я - "чайник", а VBA  - детище профессиональных программистов, то, конечно, сильно сомневаюсь в своих выводах о "нужных" и "ненужных" циклах, ведь практики у меня ноль, следовательно всех нюансов не знаю, может это и обоснованное количество циклов в VBA (в других языках их, может даже, и больше, чего я тоже не знаю :D )...
В общем, хотелось бы узнать мнение людей с большим опытом в написании макросов, что Вы думаете по этому поводу?
В каких ситуациях вы используете тот или иной цикл почему? Или может быть есть такие циклы, которые Вы вообще не используете?
 
Ну ведь разные задачи бывают. Например, цикл с известным количеством итераций и с неизвестным. Цикл, пока выполняется условие, или цикл, пока не встретится условие. Где-то происходит безусловный выход, где-то нет...
 
Выдержка из книги  VBA для "чайников" ,Стив Каммингс
Скрытый текст
Изменено: Doober - 23.03.2016 13:54:31
 
Цитата
Юрий М написал:
Например, цикл с известным количеством итераций и с неизвестным. Цикл, пока выполняется условие, или цикл, пока не встретится условие. Где-то происходит безусловный выход, где-то нет...
По этому принципу я и создал свои списки "нужных" и "не нужных".
Цитата
Ливиан написал:
например, циклы Do While.. Loop и Do Until … Loop - один из них "явно" "лишний", с помощью оператора Not (Не) один "превращается" в другой (функционально)... Один из них можно было бы и не "добавлять" в язык VBA...
Оба - с неизвестным количеством итераций. Оба - пока выполняется/не выполняется условие, или пока не встретится условие. У обоих есть безусловный выход... Абсолютно одинаковые функционально и взаимно заменяемые.
Абсолютно то же самое в отношении:
Цитата
Ливиан написал:
То же самое с Do …  Loop While и Do …  Loop Until
Также, предполагаю, While … Wend и Do While … Loop (While … Wend можно было бы и не "добавлять" в язык VBA, т.к. есть аналогичный Do While … Loop, у которого есть принудительный выход из цикла Exit, следовательно его возможности шире?)
 
3. Do While … Loop
4. Do … Loop While

здесь главное отличие, что в п.3 цикл может ни разу не сработать, т.к. сперва проверяется условие цикла, и только затем цикл выполняется. А в п.4 одна итерация цикла пройдет в любом случае, т.к. проверка условия происходит в конце итерации.

1. Do Until … Loop
2. Do … Loop Until

Эти два цикла отличаются между собой так же как и предыдущие 2. А сами пары отличаются друг от друга тем, что первой паре цикл выполняется до тех пор пока выполняется условие цикла (т.е. пока условие = true), а в второй паре цикл выполняется до тех пор пока не выполнится условие цикла (пока условие = false)

В моей практике я пользуюсь всегда только п.3. Где - то вроде читал, что это самый оптимальный цикл.
Учимся сами и помогаем другим...
 
Цитата
ber$erk написал:
В моей практике я пользуюсь всегда только п.3. Где - то вроде читал, что это самый оптимальный цикл.
Вот!
Т.е. для Вас остальные "подобные"  (т.е. условные, а не со счетчиком, с принудительным выходом) не нужны. Вы даже "обходите", получается, то, что условие выполнится хотя бы один раз или вообще не выполнится - даже это Вам не принципиально... Т.е. Вы нашли какой-то способ в одном виде условного цикла Do While … Loop решить обе ситуации (когда надо чтобы хотя бы один раз операторы цикла выполнились и без выполнения операторов, если условие не выполняется)
Т.е. у Вас тоже есть такой список "нужных" и "избыточных"
 
Ну почти всегда можно подобрать условие цикла, так, что оно хотя бы один раз да выполнится.
Изменено: ber$erk - 23.03.2016 14:24:03 (условие это оно)
Учимся сами и помогаем другим...
 
Тем более, зачем было плодить столько "функционально" одинаковых циклов?
 
:-) вопрос к разработчикам VB
Учимся сами и помогаем другим...
 
Мои предпочтения по циклам:
For ... Next и For Each ... Next не обсуждаю, потому что у них индивидуальное применение (счетчик и перебор)
По Do ... Loop и While ... Wend
Если условие проверяется до начала цикла, использую While...Wend (букв меньше писать чем с Do)
Если в конце цикла, то Do...Loop While
Until практически не использую (не нравится он мне, для меня логика программы менее понятна становится)

Почему есть разные циклы по условию (While и вариации Do Loop)?
То это зависит от удобства и необходимости использования того или иного варианта.

VBA унаследовал данные циклы из более ранних версий Basic, которые были также позаимствованы из других языков
Циклы ведь можно и на If с GoTo устроить, только такую программу будет сложно понять.
 
Цитата
MCH написал: Until практически не использую (не нравится он мне, для меня логика программы менее понятна становится)
- Вот, ради этого и затеял тему, спасибо, Until меня тоже только путает...
Цитата
MCH написал: VBA унаследовал данные циклы из более ранних версий Basic, которые были также позаимствованы из других языков
Так это "пережитки", понятно... В моей логике было так, чем лаконичнее и универсальнее, тем лучше, значит был прав, спасибо Всем, как всегда помогли разобраться
Страницы: 1
Читают тему
Наверх