Документация » Содержание справочника » Раздел 1. Введение во встроенный язык » Операторы языка » 
4

Исполняемые операторы

Исполняемые операторы выполняют непосредственную обработку данных. К ним относят системные процедуры и функции, заложенные разработчиками платформы, а также вспомогательные процедуры и функции, описанные разработчиком конфигурации (прикладной задачи).

Под описание системных процедур и функций отведен целый раздел. Здесь же мне хотелось бы рассказать о вспомогательных исполняемых операторах, которые может определять разработчик конфигурации. Основное назначение вспомогательных исполняемых операторов — повторное многократное использование кода и оптимизация модульной структуры конфигурации.

Во встроенном языке 1С:Предприятие 7.7 определены два варианта реализации вспомогательных вычислений:

  1. Реализация вычислений через процедуры, не возвращающие каких-либо значений;
  2. Реализация вычислений через функции, возвращающие результат вычислений в точку вызова;

По сути, процедуры и функции представляют собой блоки операторов, заключенные в специальные операторные скобки:

Оператор ИдентификаторОператора()
    //блок операторов
КонецОператора

Для вызова оператора достаточно указать его символьный идентификатор:

ИдентификаторОператора();

Поскольку, встроенный язык 1С:Предприятие 7.7 является регистронезависимым, идентификатор оператора можно писать в любом регистре. Но лучше использовать оригинальные имена операторов — это повысит читаемость кода не только для Вас, но и для Ваших последователей.

Программист может располагать процедуры и функции в любом модуле на свое усмотрение. Но хорошим тоном считается расположение общеиспользуемых процедур и функций в глобальном модуле, чтобы в остальных модулях была доступна только одна версия этой процедуры или функции. Все остальные процедуры и функции принято располагать по месту их использования — в программных модулях форм или объектов конфигурации.

Параметры исполняемых операторов

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

Оператор ИдентификаторОператора([Параметр1, … , ПараметрN])
    ...
КонецОператора

где Параметр1,..., ПараметрN — перечисление формальных параметров, отделенных друг от друга разделителем , (запятая).
В точке вызова исполняемого оператора, формальные параметры заменяются фактическими параметрами — значениями, передаваемыми внутрь исполняемого оператора:

ИдентификаторОператора(Значение1, …, ЗначениеN);

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

По-умолчанию, все формальные параметры исполняемого оператора являются обязательными. Это значит, что в вызове процедуры или функции необходимо заменить каждый формальный параметр на фактический.
Если вы перечислите не все фактический параметры, синтаксический анализатор выдаст ошибку: «Недостаточно фактических параметров».

Необязательные (опциональные) параметры

Несмотря на то, что все формальные параметры являются обязательными, допускается не указывать их значения. В этом случае формальный параметр получит пустое значение (значение неопределенного типа).
Также имеется возможность задать для формального параметра значение по умолчанию одного из простых типов. Для этого в определении параметра, после знака присваивания, указывается литерал значения:

Оператор ИдентификаторОператора([Параметр1[ = ЗначениеПоУмолчанию], … , ПараметрN[ = ЗначениеПоУмолчанию]])
    //блок операторов
КонецОператора

Передача параметров по значению. Передача параметров по ссылке

По-умолчанию, значения всех фактических параметров передаются в процедуру или функцию по ссылке. Это приводит к тому, что изменение формального параметра в теле процедуры или функции, также изменяет значение фактического параметра. Чтобы избежать этого, используется передача параметров по значению. Таким образом, изменение формального параметра не повлечет за собой изменения фактического. Для этого к описанию параметра добавляется ключевое слово Знач:

Оператор ИдентификаторОператора([[Знач] Параметр1, … , [Знач] ПараметрN])
    //блок операторов
КонецОператора

Предварительное объявление процедур и функций

Поскольку трансляция кода на встроенном языке выполняется за один проход, обязательным требованием является предварительное объявление процедур и функций перед их вызовом. Попытка вызова процедуры или функции без ее предварительного описания приведет к синтаксической ошибке: «Процедура не обнаружена (ИмяПроцедуры)». Для предварительного объявления процедур и функций используется ключевое слово Далее:

Оператор ИдентификаторОператора([Параметр1, … , ПараметрN]) Далее

При этом следует учесть, что предварительное описание должно включать все параметры исходных процедур и функций, включая ключевые слова Знач и Экспорт

Досрочное завершение исполняемого оператора

Для досрочного завершения выполнения операторов в теле процедуры или функции используется оператор Возврат, который передает управление на первый оператор, следующий за процедурой или функцией.

Читайте также:

  1. Оператор Функция
  2. Оператор Процедура
  3. Оператор Возврат

Комментарии

  1. «Также имеется возможность задать для формального параметра значение по умолчанию».
    Правильно ли я понял?
    Если будет передан параметр, имеющий значение (х=1), то внутри процедуры будет использоваться это значение, а если будет передан неинициализированный параметр (без значения), то внутри процедуры будет использоваться ЗначениеПоУмолчанию (например, х =0)?

  2. Модуль.
    х = 1;
    Процедура ПоказатьЗначение(Пер = 0)
    Сообщить(Пер);
    КонецПроцедуры

    ПоказатьЗначение(х);
    Сообщить(х); // тут будет 1 или 0?

    • Ну, если рассматривать приведенный код как модуль, то он не скомпилируется, т.к. операторы основной программы на платформе 1С:Предприятие (в Вашем случае это x = 1;) могут располагаться только после определения процедур и функций. Хотя суть Вы уловили верно. Если брать определение приведенной Вами процедуры, то вызов ПоказатьЗначение() выведет 0, а ПоказатьЗначение(1) выведет 1.
      Напомню, что лучший способ изучения любого языка программирования — это практика)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *