====== Команды и функции ======
: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
:!: Обратите внимание, что в отличие от встроенных функций пользовательские функции не могут возвращать значение в командной записи и не требуют использования переменной первым параметром. Это сделано для упрощения записи. Если необходим результат пользовательской функции, просто запишите её в функциональном виде.