AppleScript для абсолютных новичков

Дата публикации:15.07.2012
Поделиться в Twitter Поделиться в F******k Поделиться в VKontakte Поделиться в Telegram Поделиться в Mastodon

Глава 1. Сценарий - это серия инструкций

AppleScript как часть Mac OS может выполнять лишь ограниченное число задач. Для примера, воспроизведем системный звук. Посмотрите сейчас на сценарий [1], воспроизводящий системный звук Макинтош.

beep	[1]

Должно быть это самый короткий сценарий в мире, состоящий из единственной команды или инструкции. Одна строка содержит инструкцию, называемую оператором (statement), даже если эта строка длиной всего в одно слово. Теперь, если выполнить этот сценарий, Макинтош издаст системный звук.

Чтобы воспроизвести несколько раз системный звук, вы можете задать команду beep с числом, указывающим количество звуков, которое вы хотите услышать [2].

beep 2	[2]

Как вы можете увидеть сравнивая сценарии [1] и [2], дополнительная часть информации необязательна. Если вы не указываете число, то AppleScript предполагает, что вы хотите услышать только один сигнал. Итак, 1 - это значение по умолчанию.

Если вы считаете, что это слишком по-ПиСишному, то почему бы не позволить AppleScript общаться с нами в духе Макинтош [3], используя следующий оператор:

say "This is a spoken sentence."	[3]

Вы можете даже выбрать другой голос для произнесения этой фразы, например "Fred", "Trinoids", "Cellos", или "Zarvox" [4], чтобы изменить голос по умолчанию "Victoria".

say "This is a spoken sentence." using "Zarvox"	[4]

Примечание: в основном AppleScript не чувствителен к регистру символов текста. То есть, нет разницы будете ли вы писать прописными или строчными буквами. Однако, голоса, такие как "Victoria" или "Zarvox" следует писать соблюдая регистр.

Как вы видите, инструкции AppleScript похожи на английский язык. Это делает сценарий вполне читаемым и понимаемым, даже если вы ни разу не писали какие-либо сценарии. Но пока что сценарии [1-4] возможно пригодятся только для развлечения: пользы от них мало. Язык AppleScript имеет немного больше команд, но, возможно, не так много чтобы вас впечатляло их количество. Сила AppleScript в том, что он позволяет вам взаимодействовать с другими программами. Но эти программы должны поддерживать язык сценариев - должны быть скриптуемыми (scriptable). В результате чего в вашем распоряжении не только предоставленный, ограниченный набор команд от AppleScript (компонента Mac OS X), но также и громадное количество команд предоставляемое вашими программами.

Некоторые программы на Макинтош более популярны, чем другие. Но одна из них используется каждым пользователем Макинтош - Finder. Да, Finder это программа. Когда вы включаете Макинтош, он запускается автоматически и все время работает. Finder позволяет вам перемещать файлы, искать файлы на жестком диске, создавать папки, копировать или переименовывать их и многое другое. Например, если вы очищаете Trash, то для этого вы используете именно Finder. Но раз вы можете выполнить операцию очистки корзины мышкой или клавиатурой, то почему бы не сделать то же самое с помощью AppleScript [5].

tell application "Finder"
empty the trash	[5]
end tell

Как главный, вы должны сказать:

  • кто должен выполнить задание и
  • что должно быть выполнено.

Бесполезно говорить, например, программе Adobe PhotoShop что она должна очистить корзину. Программа PhotoShop не знает как это сделать. Поэтому, инструкция для выполнения очистки корзины должна быть направлена к Finder.

Как и в реальном мире, работу, которую приказал сделать руководитель, вы можете сделать бездумно, но ваш Макинтош куда более обязательный работник, и делает то, что ему говорят. Если в корзине лежали важные документы, то после выполнения сценария AppleScript [5], вы потеряете их навсегда.

Первый оператором сценария [5.1] - оператор "tell", которым мы просим AppleScript (компонент Mac OS X) перенаправить один или более операторов другой программе, здесь программе Finder. AppleScript (компонент Mac OS X) будет продолжать так делать до тех пор, пока не встретит оператор "end tell" [5.3]. В приведенном выше сценарии [5] мы указываем AppleScript послать сообщение программе Finder инструкцию очистки корзины и затем прекращаем говорить программе Finder, что делать. Взятые вместе, получатся такие строки:

tell application "xyz"
end tell

которые называются "блоком обращения" (tell block). Инструкции выполняемые программой "xyz" заключены в блок обращения программы "xyz". Кстати, несмотря на то что язык AppleScript не очень строг в системе обозначений, при сравнении с другими языками сценариев и особенно с языками программирования обнаруживается, что у него тоже есть некоторые правила. Одно из них гласит, что вы обязаны заключать в двойные кавычки имя программы, как в первом операторе [5.1]. (Изображение и соответственно компьютерное представление кавычек имеет большое значение, так здесь имеются в виду двойные прямые верхние кавычки ("). В тексте книги часто встречаются кавычки елочки: " и ", которые в языке AppleScript также имеют большое значение и отличаются от прямых кавычек. - прим. ред.)

Еще можно дать Finder больше инструкций подряд. В примере ниже [6], два оператора [6.2, 6.3] предназначаются программе Finder. Так как оба оператора должны выполнятся программой Finder, они должны быть внутри блока обращения программы Finder.

tell application "Finder"
empty the trash	[6]
open the startup disk
end tell

После очистки корзины, Finder откроет окно, показывающее содержимое вашего жесткого диска.

Как видите, мы можем делать с Finder всё что захотим. Мы можем даже сказать Finder, чтобы он изменил размер окна, поменял его положение на экране и многое другое. Вы научитесь делать это позже.

А сейчас мы создадим сценарий, содержащий все инструкции, как операторы для Finder, так и для самого AppleScript (компонента Mac OS X) [7].

tell application "Finder"
empty the trash
open the startup disk	[7]
end tell
beep

Сначала Finder получает пару инструкций [7.2, 7.3]. Затем инструкция "beep" [7.5] выполниться AppleScript'ом. Фактически, сигнал укажет, что сценарий выполнен.

Интересно то, что неважно где вы расположите инструкцию "beep" (и любую другую инструкцию понятную AppleScript (компоненту Mac OS X)) внутри или снаружи блока обращения [8].

tell application "Finder"
empty the trash
beep	[8]
open the startup disk
end tell

Хотя Finder не знает команды "beep", AppleScript (компонент Mac OS X) знает как на неё реагировать. Это делает сценарий и читаемым, и понятным. Другими словами, у вас получится в начале блок обращения, содержащий первый оператор Finder [8.2], потом оператор состоящий из команды "beep", и наконец, вторая часть блока обращения с последним оператором Finder [8.4].

Помните, пока команды понятны AppleScript (компоненту Mac OS X) они могут находиться в любом месте сценария. Каждая инструкция предназначенная для какой-либо конкретной программы, такой как Finder, должна быть внутри блока обращения этой программы. Следующий сценарий [9] содержит критическую ошибку (последний оператор [9.5]).

tell application "Finder"
empty the trash
beep	[9]
end tell
open the startup disk

AppleScript (компонент Mac OS X) не знает как открыть диск, и не способен сам отыскать программу, которая сможет это сделать. Первая часть сценария (операторы [9.2-9.3] внутри блока обращения) будет прекрасно выполнена, но последний оператор [9.5] невыполним.

В процессе выполнения сценария, если возникнет хотя бы одна ошибка, то какие-либо последующие операторы выполняться не будут [10].

tell application "Finder"
empty the trash
end tell	[10]
open the startup disk
say "I emptied the trash and opened the startup disk for you" using "Victoria"

После очистки корзины AppleScript (компонент Mac OS X) остановится на операторе [10.4], который должен был бы адресоваться Finder'у. Вы не услышите фразу, произносимую оператором [10.5], хотя в нем нет ничего неправильного.

Дополнительная информация

  1. Полный вариант книги (rtf/7z)-- электронная книга с сохранением иллюстраций, форматирования, изменений в цвете шрифта.


Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024