====== Бета-функционал ====== ====== Циклы ====== В Autorun реализовано два типа циклов. ===== For .. Next ===== Простой цикл с предварительно заданными условиями. Шаг по умолчанию равен 1. Шаг может быть отрицательным. For var = To [Step ] ... Next **Пример** For var = 1 To 4 MsgBox(var) --> 1 --> 2 --> 3 --> 4 Next ===== While.. Wend ===== Цикл по условию. Выполняется, пока условие истинно. While ... Wend **Пример** var = 3 While var > 0 MsgBox(var) --> 3 --> 2 --> 1 var = var - 1 Next :!: Внимание! Не создавайте пустых циклов и долго выполняющихся циклов без использования задержки. Это может привести к повышенной нагрузке на процессор. ====== Переменные ====== Переменные в Autorun могут быть глобальные и локальные. Локальные переменные имеют смысл только внутри функций. Global [Const] Var1 [= expr] [, Var2 [= expr] .. [, VarN [= expr]] Local [Const] Var1 [= expr] [, Var2 [= expr] .. [, VarN [= expr]] Const Var1 [= expr] [, Var2 [= expr] .. [, VarN [= expr]] **Global** - переменная будет глобальной. В основном теле скрипта может быть опущена, т.к. в нем переменные всегда глобальные. В функции принудительно устанавливает глобальный диапазон действия переменной. Если переменной с таким именем еще не было в глобальном диапазоне, то она создается, если была - устанавливается новое значение. **Local** - переменная будет локальной. В основном теле скрипта смысла не имеет. В функции принудительно устанавливает локальный диапазон действия переменной, что позволяет перекрыть глобальную переменную с тем же именем. **Const** - переменная будет константой. В основном имеет смысл использовать совместно с Global и/или в основном теле скрипта, поскольку значение локальной переменной исчезает при выходе из функции. После первичного создания переменной значение константы изменить нельзя. Также возможно задавать переменные без предварительного определения: Var1 = expr Var2 = expr Если ключевые слова не заданы, то правила следующие: при присваивании переменной в функции, если переменная с тем же именем существует в глобальном диапазоне, то значение присваивается ей. Если не существует, то создается локальная переменная. var1 = 1 var2 = 1 MyFunc() Func MyFunc() Local var1 = 123 var2 = 123 Global var3 = 123 var4 = 123 Local var5 = 123 EndFunc var1 --> 1 var2 --> 123 var3 --> 123 var4 --> undefined var5 --> undefined ====== Функции ====== Пользовательские функции задаются с помощью ключевых слов Func с последующим именем функции и списком параметров в скобках, и EndFunc. Параметры разделяются запятой. Вызов функции производится по имени аналогично вызову любой встроенной функции или команды. Если имя вызываемой функции неизвестно на этапе запуска, вызов можно производить с помощью функции Call или Eval. В функциях могут быть заданы 4 вида формальных параметров: * Простой параметр * Параметр "по ссылке" * Параметр со значением по умолчанию * Открытый список параметров === Простой параметр === Простой параметр задается просто именем переменной. Значение актуального параметра будет вычисляться перед передачей в функцию. MyFunc(123+456) Func MyFunc(var) MsgBox(var) --> 579 EndFunc === Параметр "по ссылке" === Этот тип параметра дает возможность функции возвращать назад измененный параметр. Это удобно использовать, чтобы уменьшить число глобальных переменных, что в свою очередь уменьшает число возможных ошибок. Этот параметр задается просто именем переменной. Но значение актуального параметра должно также быть переменной, иначе будет выдано сообщение об ошибке. Значение актуальной переменной будет вычисляться перед передачей в функцию, и функция может его изменить. a = 1 MsgBox(a) --> 1 MyFunc(a) Func MyFunc(ByRef var) MsgBox(var) --> 1 var = 123 EndFunc MsgBox(a) --> 123 === Параметр со значением по умолчанию === Этот параметр задается именем переменной с присвоением значения по умолчанию. Это позволяет опускать при вызове функции часть параметров. Параметры этого типа должны идти после параметров двух предыдущих типов, но перед открытым списком параметров. Если актуальный параметр будет задан, то переменной будет присвоено его значение, если опущен - будет присвоено значение по умолчанию. MyFunc("text") MyFunc("text", "My title") Func MyFunc(var1, var2 = "Default title") MsgBox(var1) --> text MsgBox(var2) --> Default title --> My title EndFunc === Открытый список параметров === Параметр задается специальным значением "..." и позволяет задавать неограниченный список входных параметров. Этот параметр должен находиться в самом конце списка формальных параметров, всё что после него будет проигнорировано. Получение параметра производится с помощью функции Args: MyFunc(123, 456, 789) Func MyFunc(...) For i = 1 To Args() MsgBox(Args(i), i) --> 123 --> 456 --> 789 Next EndFunc ====== Args ====== Функция предназначена для получения параметров функции, переданных открытым списком. Args([индекс]) **Параметры** |< 100% 15% >| |индекс|Индекс получаемого параметра. Начинается с 1. Если опущен, возвращается число переданных параметров.| ====== Call ====== Call FuncName [ Param1 [ Param2 .. [ ParamN]]] Call("FuncName" [, Param1 [, Param2, .. [, ParamN]]]) **Параметры** |< 100% 15% >| |FuncName|Имя вызываемой функции.| |Param|Имя вызываемой функции.| **Возвращаемое значение** Значение, возвращаемое функцией, имя которой задано первым параметром (только в функциональной записи). **Пример** a = "MsgBox" Call(a, "Text", "Title") **Примечания** Используйте эту функцию только при необходимости вызова функции или команды, имя которой нужно передавать в переменной (т.е. на этапе написания скрипта не определено, какую именно функцию нужно будет запускать). В остальных случаях предпочтительнее прямой вызов функции. ====== Eval ====== Вычисляет выражение, заданное строкой. Eval "expression" Eval("expression") **Параметры** |< 100% 15% >| |"expression"|Строка с вычисляемым выражением.| **Возвращаемое значение** Значение, полученное в результате вычисления заданного строкой выражения (только в функциональной записи). **Пример** a = 4 Eval("1+2+3+a") -- > 10 **Примечания** Функция также может выполнять другие функции, заданные в строке. Используйте эту функцию только при необходимости вычисления выражения, заданного строкой. В остальных случаях предпочтительнее прямая запись выражения.