====== Команды и функции ====== :i: В этой справке при указании параметров команд и функций в обобщённом виде используются угловые скобки: **<параметр>**. Если параметр необязателен, он заключается в квадратные скобки: **[<параметр>]**. Если команда возвращает результат, то в командной записи первым параметром должна идти переменная. Для упрощения справки она не указывается в списке параметров для каждой функции. В обобщенном виде она указывается как **** в верхнем регистре. Описание команд, оптимизированных для использования в выражениях (т. е. тех, которым не требуется указание переключателей), включает оба вида синтаксиса. =====Команды===== Каждая команда в Autorun располагается на одной строке и должна находиться в её начале (но допустимы пробельные символы перед ней). Команда может включать в себя обязательные параметры, необязательные параметры и переключатели. Порядок регламентирован следующим образом: команда, переключатели, обязательные параметры, необязательные параметры. Параметры и переключатели разделяются пробелом. Если в параметре команды должен использоваться пробел, параметр должен быть взят в кавычки --- двойные или одинарные. При этом кавычки другого типа могут быть использованы в тексте параметра. Все переключатели должны начинаться с "/" и находиться перед любыми параметрами. Переключатели предназначены для изменения поведения команды в отношении её поведения по умолчанию. Обычно все переключатели необязательны, но некоторые команды требуют наличия определенных переключателей, чтобы производить какие-либо действия. Если команда возвращает значение, переменная, куда будет записан результат, всегда размещается первой в списке параметров (но после переключателей). Ряд команд умеет самостоятельно разворачивать переменные окружения в определённых параметрах. Факт поддержки указывается в документации. В этом случае переменные и переменные окружения можно использовать непосредственно в тексте параметра. =====Внутренние функции===== В общем случае практически любая команда Autorun может быть записана как функция. Но использование командного синтаксиса зачастую предпочтительнее, так как для команд со сложным интерфейсом такая запись будет короче и понятнее. Тем не менее для функций, возвращающих результат, при использовании их в выражениях очевидно более логичным выглядит функциональная запись. Подробнее об использовании команд в функциональной записи в разделе [[expressions#Использование команд и функций в выражениях]]. =====Пользовательские функции===== Пользовательские функции задаются с помощью ключевых слов [[func_endfunc|Func]] и [[func_endfunc|EndFunc]]. Функция может иметь параметры и возвращать значение. Аналогично именам переменных имена функций могут состоять только из латинских букв, цифр и символа подчёркивания. Имя функции не может начинаться с цифры. Имя функции не может совпадать с именем встроенной команды. Вызов функции производится по имени аналогично вызову любой встроенной функции или команды. Если имя вызываемой функции неизвестно на этапе запуска, вызов можно производить с помощью функции [[Call]] или [[Eval]]. Регистр имени значения не имеет. Выход из функции осуществляется по достижении её конца либо путём использования ключевого слова [[func_return]] с опциональным возвращаемым значением. Если выход из функции происходит без использования Return либо с использованием Return без заданного значения, возвращаемое значение функции --- пустая строка. Пользовательские функции не поддерживают механизм переключателей. В командной записи переключатели будут переданы как обычный строчный параметр: UserFunc /N "str" Func UserFunc(a, b) MsgBox(a & b) # --> "/Nstr" EndFunc :!: Обратите внимание, что в отличие от встроенных функций пользовательские функции не могут возвращать значение в командной записи и не требуют использования переменной первым параметром. Это сделано для упрощения записи. Если необходим результат пользовательской функции, просто запишите её в функциональном виде.