Проект gpl-2C |
Документация\Уровень 0\Описание встроенного языка |
Пред. | След. | |
1.2. Программные модули |
1.3. Конструкции языка |
1.4. Системные константы и функции |
1.3. Конструкции языка
1.3.1. Лексемы
Модуль программы на языке 2С состоит из 3 сущностей:
-Константа
-Идентификатор
-Разделитель
В общем случае модуль состоит из набора констант и идентификаторов, разделенных между собой символами-разделителями.
Например:
<Идентификатор><Разделитель>< Константа >
Может означать такую запись на языке 2С:
Перем1
=100Примечание:
В отличие от других языков программирования (например, С++), в 2С необязателен символ разделитель конца строки - «;», но он и не запрещается.
Символы разделителями - это все символы не входящие в русский и английский алфавит (буквы), символы не входящие в цифры и не один из символов «_» (подчеркивание), «"» (кавычка), «'» (апостроф).
Все символы (группы символов), начинающиеся с букв или символа «_» считаются идентификаторами.
Все символы (группы символов), начинающиеся на числа считаются численными константами.
Все символы (группы символов), начинающиеся на символ ), «"» (кавычка) считаются строковой константой.
Все символы (группы символов), начинающиеся на символ ), «'» (апостроф) считаются константой даты (т.е. задание числа, месяца и года).
Пример:
Перем1 - это идентификатор
1000 - это численная константа
"Это текст" - это строковая константа
'01.01.2004' - это константа дата
В свою очередь идентификаторы могут быть как ключевыми словами, так и наименованием переменных, процедур, функций (в т.ч. системных), меток безусловного перехода.
1.3.2. Структурные
1.3.2.1. Для ... Цикл (For ... Do)
Русскоязычный синтаксис:
Для <Перем1>=<Выражение1> По <Выражение2> Цикл
// операторы
КонецЦикла
Англоязычный синтаксис:
For <Value1>=<Expression1> To <Expression2> Do
// operators
EndDo
Назначение:
Оператор цикла с шагом.
Параметры:
<Перем1>(<Value1>) - идентификатор переменной счетчика цикла
<Выражение1>(<Expression1>) - начальное значение счетчика цикла
<Выражение2>(<Expression2>) - конечное значение счетчика цикла
1.3.2.2. Если ... Тогда ... ИначеЕсли ... Иначе (If ... Then ... ElsIf ... Else )
Русскоязычный синтаксис:
Если <Выражение1> Тогда
// операторы Тогда
ИначеЕсли <Выражение2> Тогда
// операторы ИначеЕсли
Иначе
// операторы Иначе
КонецЕсли
Англоязычный синтаксис:
If <Expression1> Then
// operators Then
ElsIf <Expression2> Then
// operators ElsIf
Else
// operators Else
EndIf
Назначение:
Оператор условного выполнения.
Параметры:
<Выражение1>(<Expression1>) - логическое выражение
<Выражение2>(<Expression2>) - логическое выражение
1.3.2.3. Пока ... Цикл (While ... Do)
Русскоязычный синтаксис:
Пока <Выражение1> Цикл
// операторы
КонецЦикла
Англоязычный синтаксис:
While <Expression1> Do
// operators
EndDo
Назначение:
Оператор цикла с предусловием.
Параметры:
<Выражение1>(<Expression1>) - логическое выражение
1.3.2.4. Попытка ... Исключение (Try ... Except)
Русскоязычный синтаксис:
Попытка
// критичные операторы
Исключение
// обработка исключительной ситуации
КонецПопытки
Англоязычный синтаксис:
Try
// operators
Except
// process exception
EndTry
Назначение:
Управляет работой программы, основываясь на возникающих в процессе работы модуля ошибочных (исключительных) ситуаций и определяет обработку этих ситуаций. В качестве ошибочных (исключительных) ситуаций воспринимаются ошибки времени выполнения модуля.
В выдаче диагностики может помочь встроенная функция ОписаниеОшибки() (GetErrorDescription). См. также ВызватьИсключение()
Параметры:
нет
1.3.2.5. Процедура (Procedure)
Русскоязычный синтаксис:
Процедура <ИмяПроц>([[Знач] <Парам1>[=<ДефЗнач>],... ,[Знач] <ПарамN>[=<ДефЗнач>]]) [Экспорт][Виртуально]
//Объявление локальных переменных
//Операторы
...
Возврат
//Операторы
...
КонецПроцедуры
Англоязычный синтаксис:
Procedure <NameProc>([Val] <Param1>[=<DefVal>],... ,[Val] <ParamN>[=<DefVal>]]) [Export][Virtual])
//Local variable
//Operators
...
Return
//Operators
...
EndProcedure
Назначение:
Ключевое слово Процедура начинает секцию исходного текста, выполнение которого можно инициировать из любой точки программного модуля, просто указав <Имя_процедуры> со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Конец программной секции процедуры определяется по ключевому слову КонецПроцедуры.
Замечание:
Ключевые слова Процедура, КонецПроцедуры, являются не операторами, а операторными скобками, поэтому не должны заканчиваться точкой с запятой (это может приводить к ошибкам выполнения модуля).
Параметры:
<ИмяПроц> - Назначает имя процедуры.
Знач - Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра.
<Парам1>,...,<ПарамN> - Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответсвовать значениям передаваемых при вызове процедуры фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст.
=<ДефЗнач> - Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров. Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает ''пустое'' значение (значение неопределенного типа). Если параметру не задано значение по умолчанию и он является последним в списке передаваемых параметров, то при вызове процедуры его нельзя опускать. Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром. Если параметру не задано значения по умолчанию, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить.
Экспорт - Необязательное ключевое слово, которое указывает на то, что данная процедура является доступной из других программных модулей. Имеет смысл только в глобальном программном модуле.
//Объявления локальных переменных - Объявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры.
//Операторы - Исполняемые операторы процедуры.
Возврат - оператор, который завершает выполнение процедуры и осуществляет возврат в точку программы, из которой было обращение к процедуре. Использование данного оператора в процедуре не обязательно.
1.3.2.6. Функция (Function)
Русскоязычный синтаксис:
Функция <ИмяФунк>([[Знач] <Парам1>[=<ДефЗнач>],... ,[Знач] <ПарамN>[=<ДефЗнач>]]) [Экспорт][Виртуально]
//Объявление локальных переменных
//Операторы
...
Возврат <Возвращаемое значение>
//Операторы
...
КонецФункции
Англоязычный синтаксис:
Function <NameFunc>([Val] <Param1>[=<DefVal>],... ,[Val] <ParamN>[=<DefVal>]]) [Export][Virtual])
//Local variable
//Operators
...
Return <Returned Value>
//Operators
...
EndProcedure
Назначение:
Ключевое слово Функция начинает секцию исходного текста, выполнение которого можно инициировать из любой точки программного модуля, просто указав <Имя_функции> со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Конец программной секции
Функции определяется по ключевому слову
КонецФункции.
Замечание:
Ключевые слова Функция,
КонецФункции, являются не операторами, а операторными скобками, поэтому не должны заканчиваться точкой с запятой (это может приводить к ошибкам выполнения модуля).
Параметры:
<Имя_функции> - Назначает имя функции
Знач - Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении функции никак не повлияет на фактический параметр, переданный при вызове функции. Если это ключевое слово не указано, то параметр функции передается по ссылке, то есть изменение внутри функции значения формального параметра приведет к изменению значения соответствующего фактического параметра.
<Парам1>,...,<ПарамN> - Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответсвовать значениям передаваемых при вызове функции фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте функции. Список формальных параметров может быть пуст.
=<ДефЗнач> - Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров. Если параметр при вызове функции опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает ''пустое'' значение (значение неопределенного типа). Если параметру не задано значение по умолчанию и он является последним в списке передаваемых параметров, то при вызове функции его нельзя опускать. Если параметру задано значение по умолчанию и он является последним в списке, то при вызове функции его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром. Если параметру не задано значения по умолчанию, то при вызове функции его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить.
Экспорт - Необязательное ключевое слово, которое указывает на то, что данная функция является доступной из других программных модулей. Имеет смысл только в глобальном программном модуле.
//Объявления локальных переменных - Объявляются локальные переменные, на которые можно ссылаться только в рамках этой функции.
//Операторы - Исполняемые операторы функции.
Возврат - оператор, который завершает выполнение функции и возвращает ВозвращаемоеЗначение в выражение, в котором используется функция. Использование данного ключевого слова в функции обязательно.
<ВозвращаемоеЗначение> - Выражение, значение которого содержит результат обращения к функции.
1.3.3. Предварительное описание процедур и функций
1.3.3.1. Процедура ... Далее (Procedure ... Forward)
Русскоязычный синтаксис:
Процедура <ИмяПроц>([[Знач] <Парам1>[=<ДефЗнач>],... ,[Знач] <ПарамN>[=<ДефЗнач>]]) Далее
Англоязычный синтаксис:
Procedure <NameProc>([Val] <Param1>[=<DefVal>],... ,[Val] <ParamN>[=<DefVal>]]) Forward
Назначение:
В тексте программного модуля допускается предварительное описание процедур и функций без их определения.
1.3.3.2. Функция ... Далее (Function ... Forward)
Русскоязычный синтаксис:
Функция <ИмяПроц>([[Знач] <Парам1>[=<ДефЗнач>],... ,[Знач] <ПарамN>[=<ДефЗнач>]]) Далее
Англоязычный синтаксис:
Function <NameProc>([Val] <Param1>[=<DefVal>],... ,[Val] <ParamN>[=<DefVal>]]) Forward
Назначение:
В тексте программного модуля допускается предварительное описание процедур и функций без их определения.
1.3.4. Передача управления
1.3.4.1. Возврат (Return)
Русскоязычный синтаксис:
Возврат [<Выражение>]
Англоязычный синтаксис:
Return [<Expression>]
Назначение:
Завершение процедуры или функции.
Параметры:
<Выражение> - значение возвращаемое функцией.
Замечание:
Возвращаемое значение обязательно при завершении функции, но не может использоваться при завершении процедуры.
Подробнее см. в документации, глава 'Управляющие операторы'.
1.3.4.2. ВызватьИсключение (Raise)
Русскоязычный синтаксис:
ВызватьИсключение
Англоязычный синтаксис:
Raise
Назначение:
Данный оператор применяется в языковой конструкции Попытка-Исключение-КонецПопытки. Обработки исключительной ситуации могут быть вложенными. При этом, при возникновении исключительной ситуации управлениие будет передано на самый ''внутренний'' обработчик, начинающийся с ключевого слова Исключение. Последовательность операторов обработки исключительной ситуации может содержать оператор ВызватьИсключение. Выполнение данного оператора прекращает выполнение последовательности обработки исключительной ситуации и производится поиск более ''внешнего'' обработчика. Если таковой есть, то управление передается на его первый оператор. Если нет, то выполнение модуля прекращается с выдачей сообщения о первоначально возникшей ошибке. Оператор ВызватьИсключение может встречаться только внутри операторных скобок Исключение ... КонецПопытки..
1.3.4.3. Перейти (Goto)
Русскоязычный синтаксис:
Перейти <Метка>;
Англоязычный синтаксис:
Goto <Label>;
Назначение:
Безусловная передача управления на исполняемый оператор программного блока.
Параметры:
<Метка> - метка исполняемого оператора программного блока.
Подробнее см. в документации, глава 'Управляющие операторы'
1.3.4.4. Прервать (Break)
Русскоязычный синтаксис:
Прервать
Англоязычный синтаксис:
Break
Назначение:
Прерывает оператор цикла.
1.3.4.5. Продолжить (Continue)
Русскоязычный синтаксис:
Продолжить
Англоязычный синтаксис:
Continue
Назначение:
Передает управление в начало цикла.