В прошлой статье был описан метод добавления новых операторов недокументированным способом. Сейчас рассмотрим способы добавления нового оператора "Пока" с постусловием с использованием официального документированного подхода.
В языке 1С отсутствует цикл с постусловием. В 1С есть только 3 циклических оператора ("Пока" с предусловием, "Для" и "Для Каждого"). Поэтому, чтобы обойти это ограничение, приходится прибегать к различным изменениям, таким как введение переменной, которую затем сбрасывают в ложь внутри цикла, использование условия "Истина" с выходом через оператор "Прервать" или "Возврат", создание бесконечного цикла с помощью непопулярного оператора "Перейти" и метка.
Способы обхода:
- Операторы присваивания и "Пока".
ПовторятьЦикл = Истина; Пока ПовторятьЦикл Цикл // Операторы ПовторятьЦикл = <Логическое выражение>; КонецЦикла;
- Операторы "Пока", "Если" и "Прервать".
Пока Истина Цикл // Операторы Если <Логическое выражение> Тогда Прервать; КонецЕсли; КонецЦикла;
- Операторы вызова процедуры, "Пока", "Если" и "Возврат".
Процедура ЦиклСПостусловием() Пока Истина Цикл // Операторы Если <Логическое выражение> Тогда Возврат; КонецЕсли; КонецЦикла; КонецПроцедуры ЦиклСПостусловием();
- Операторы " Если", "Перейти" и метка.
~ПовторятьЦикл: // Операторы Если <Логическое выражение> Тогда Перейти ~ПовторятьЦикл; КонецЕсли;
И так, вопросы?
А зачем он вообще нужен в 1С?
Например, вдруг понадобится при переводе кода с других языков программирования на язык 1С. А пока его нет, можно заменить на аналогичные. Способы обхода предоставил выше.
А что уже есть переводы с других языков программирования на язык 1С?
Возможно есть один с шарпа.
А с языка 1С на другие языки программирования?
Возможно есть один на языки питон, си плюс плюс и т.д.
А какой, по вашему, должен выглядеть новый оператор цикл с постусловием в 1С?
Примерно так:
Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
Пока <Логическое выражение> КонецЦикла;
Но лучше так:
Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
До <Логическое выражение> КонецЦикла;
А что пишет чат гпт?
Давайте спросим.
Чат гпт не знает, что оператор "Пока" с постусловием не существует в 1С, немного путает с циклами и отсутствует конец блока цикла "КонецЦикла".
Если нет вопросов, то спасибо всем за внимание!
Не забудьте поддержать плюсиками.
С вами был безумный Макс!