Перейти к основному содержимому

Вызов встроенных функций

  • Аргументы позиционные, и каждый обязателен. Ни одна встроенная функция не принимает необязательных, именованных аргументов или переменного их числа. Имена параметров в справочнике — только подписи.
  • Число аргументов проверяется при компиляции скрипта, поэтому неверное число останавливает скрипт до того, как что-либо выполнится.
  • Типы аргументов проверяются при выполнении вызова и должны совпадать точно, с одним расширением. Integer на месте объявленного Real становится этим Real (MathSqrt(16) работает), как и в арифметике. Real на месте объявленного Integer или число на месте объявленного Text (UtilityPrint(42)) останавливает действие с ошибкой Name: аргумент N имеет неверный тип. Параметры, показанные как Any, принимают любой тип.
  • Каждая встроенная функция возвращает значение. Большинство действий возвращают Bool со смыслом «получилось ли», который можно проигнорировать или проверить.
  • Отсутствие чего-либо — обычный результат, а не ошибка. Ненайденное окно — это пустой Window. Передача пустого Window или уже закрытого окна во встроенную функцию Window* ничего не делает и возвращает false, 0 или "", поэтому цепочка вызовов для ненайденного дескриптора безопасна. Встроенные функции контекста вне своего триггера возвращают "", 0, -1 или пустой Window.
  • Множественные результаты: сначала перечисление, затем обращение по индексу. Вызов вроде WindowGetAllTopLevel(), FolderEnumerateAll(…), StringSplit(…) или DisplayMonitorEnumeratedAll() возвращает количество, а парная …EnumeratedAt(i)/…PartAt(i) читает элемент i, от 0 до количества − 1. У каждого семейства один кэш на запуск скрипта, и следующий вызов перечисления того же семейства заменяет его.
  • Плагин может добавлять собственные встроенные функции. Их вызовы выглядят так же. Если плагин не подключён в момент компиляции скрипта, скрипт не запускается, и уведомление сообщает причину.
n = WindowGetAllTopLevel(); // количество; заполняет кэш окон
for (i = 0; i < n; i = i + 1) {
w = WindowGetEnumeratedAt(i); // элемент i из этого кэша
if (WindowGetVisible(w) && WindowGetTitle(w)) {
UtilityPrint(WindowGetExecutableName(w) + " - " + WindowGetTitle(w));
}
}