Когда понадобился новый оператор

18.03.24

Разработка - Рефакторинг и качество кода

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

В прошлой статье был описан метод добавления новых операторов недокументированным способом. Сейчас рассмотрим способы добавления нового оператора "Пока" с постусловием с использованием официального документированного подхода.

В языке 1С отсутствует цикл с постусловием. В 1С есть только 3 циклических оператора ("Пока" с предусловием, "Для" и "Для Каждого"). Поэтому, чтобы обойти это ограничение, приходится прибегать к различным изменениям, таким как введение переменной, которую затем сбрасывают в ложь внутри цикла, использование условия "Истина" с выходом через оператор "Прервать" или "Возврат", создание бесконечного цикла с помощью непопулярного оператора "Перейти" и метка.

Способы обхода:

  1. Операторы присваивания и "Пока".
    ПовторятьЦикл = Истина;
    Пока ПовторятьЦикл Цикл
    	// Операторы
    	ПовторятьЦикл = <Логическое выражение>;
    КонецЦикла;
  2. Операторы "Пока", "Если" и "Прервать".
    Пока Истина Цикл
    	// Операторы
    	Если <Логическое выражение> Тогда
    		Прервать;
    	КонецЕсли;
    КонецЦикла;
  3. Операторы вызова процедуры, "Пока", "Если" и "Возврат".
    Процедура ЦиклСПостусловием()
    	Пока Истина Цикл
    		// Операторы
    		Если <Логическое выражение> Тогда
    			Возврат;
    		КонецЕсли;
    	КонецЦикла;
    КонецПроцедуры
    ЦиклСПостусловием();
  4. Операторы " Если", "Перейти" и метка.
    ~ПовторятьЦикл:
    // Операторы
    Если <Логическое выражение> Тогда
    	Перейти ~ПовторятьЦикл;
    КонецЕсли;

     

И так, вопросы?

А зачем он вообще нужен в 1С?

Например, вдруг понадобится при переводе кода с других языков программирования на язык 1С. А пока его нет, можно заменить на аналогичные. Способы обхода предоставил выше.

А что уже есть переводы с других языков программирования на язык 1С?

Возможно есть один с шарпа.

А с языка 1С на другие языки программирования?

Возможно есть один на языки питон, си плюс плюс и т.д.

А какой, по вашему, должен выглядеть новый оператор цикл с постусловием в 1С?

Примерно так:

Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
Пока <Логическое выражение> КонецЦикла;

Но лучше так:

Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
До <Логическое выражение> КонецЦикла;

А что пишет чат гпт?

Давайте спросим.

 

 

Чат гпт не знает, что оператор "Пока" с постусловием не существует в 1С, немного путает с циклами и отсутствует конец блока цикла "КонецЦикла".

Если нет вопросов, то спасибо всем за внимание!

Не забудьте поддержать плюсиками.

С вами был безумный Макс!

Вступайте в нашу телеграмм-группу Инфостарт