|
ВведениеПочему существуют эти инструкции?Эти инструкции служат подобной цели к Инструкциям по Интерфейсу пользователя: продвинуть принципы базовой конструкции и непротиворечивость в интерфейсе сценариев всех приложений Macintosh. Принципы разработки - все о том, чтобы быть специфичным для задачи; чем более близко Вы соответствуете умственную модель пользователя своего приложения, тем более полезный это будет. Непротиворечивость в интерфейсе сценариев ценна по тем же причинам, это находится в регулярном интерфейсе: это упрощает для пользователей изучать новые приложения и уменьшает возможности, что они сделают ошибки следующими старыми привычками, который поочередно сокращает количество обращений за поддержкой, которые Вы будете иметь к полю. Кроме того, непротиворечивость среди приложений продвигает AppleScript как последовательную систему, не только тонкий бит связующего звена, скрепляющего мешанину того, что является практически различными языками. Следующим эти инструкции можно сделать пользователей более счастливыми, собственная проще жизнь, и справка продвигает AppleScript как полезный инструмент. Что пишет сценарий?Сценарии программируют использование языка сценариев. Это не было очень полезно: что такое язык сценариев? Язык сценариев является специфичным для задачи языком программирования, в противоположность системному языку программирования, такому как C, C++ или Java. Системные языки программирования разработаны для создавания приложений с нуля и являются очень общей целью – можно создать что-либо, но также необходимо создать все, часто из очень маленьких частей. Языки сценариев, с другой стороны, разработаны с определенной задачей в памяти. Они могут выразить вещи, надлежащие задаче очень легко, но являются неловкими или даже отключают звук по другим вопросам. Например, Быть специфичным для задачи является хорошей вещью по нескольким причинам. Мало того, что это позволяет, Вы записать меньше кода, но и людей делают намного лучше в познавательных задачах (как программирование), когда содержание установлено в знакомом домене. Поэтому издатель, который изумлен указателями и укусил арифметику, все еще будет в состоянии записать сложный сценарий, работающий с точки зрения текстовых потоков и иллюстраций. При размышлении о том, что специфично для задачи, полезно рассмотреть не только, что задача, но также и каково это не. Например, издатель выше обеспокоен измерениями поля и кернингом, но не хочет быть обеспокоенным управлением памятью или объявлением тип переменных. Соответственно, языки сценариев имеют тенденцию выделять и освобождать память автоматически, не требовать тип переменных, и обычно заботиться о большом количестве подробных данных, с которыми системный язык программирования потребовал бы, чтобы Вы имели дело. Весь этот фокус и удобство прибывают в стоимость, конечно: некоторые языки сценариев являются дико несоответствующими для некоторых проблем и программ, записанных на языке сценариев, обычно выполняемом медленнее, чем эквивалентный, записанный в системном языке программирования. С другой стороны, сценарист не мог бы быть в состоянии записать более быструю версию вообще или не мог бы просто иметь времени, и незаписанная программа работает только с такой скоростью, как человек может сделать задачу вручную. Для дополнительного взятия на этом предмете см., что статья Джона Устерхута Пишет сценарий: Высокоуровневое Программирование в течение 21-го века. Что такое scriptability?Scriptability является возможностью Вашего приложения, которым будет управлять сценарий – т.е. программа – а не лицо, вооруженное клавиатурой и мышью. Путем подавания scriptable заявки пользователи могут настроить его, связать его в автоматизированные потоки операций, и обычно делать его более полезным для себя способами, которые были слишком определенными для Вас для беспокойства, или что Вы даже не вообразили во-первых. Существует несколько способов приблизиться к scriptability, но самый интересный и полезный должен представить уровень Вашего приложения модели. Этот срок прибывает из шаблона разработки контроллера представления модели (MVC): уровень модели содержит данные приложения и логику для работы на нем; уровень представления представляет те данные в видимой форме, скажите в окне; и уровень контроллера посредничает между ними, обновляя представление, когда модель изменяется и обновляя модель, поскольку пользователь управляет представлением. Для полного описания см. Шаблон разработки Контроллера представления Модели. Представление модели, а не представления имеет два главных преимущества. Во-первых, модель обычно более стабильна, чем представление. Поскольку Вы производите новые версии своего приложения, кнопки могут переместиться, и команды могут измениться, но что фактически делает Ваше приложение является относительно постоянным. Если сценарии с точки зрения модели, то существующие сценарии и знание сценаристов остаются допустимыми. Во-вторых, модель более полезна, потому что она имеет отношение к фактической задаче, а не как сделать это. Например, если Вы хотите изменить имя файла в Средстве поиска, можно сказать, чтобы определить имя того файла, вместо того, чтобы описать ориентированные на представление шаги: выберите файл, щелкните по заглавной роли и введите некоторые символы. Что такое AppleScript?AppleScript является языком сценариев, создаваемым Apple Computer, и является основным языком для управления scriptable приложениями Macintosh. Это имеет подобный английскому языку синтаксис, строго объектно-ориентировано, и имеет несколько функций, делающих его уникально подходящим к работе с большим количеством объектов. Для полного изложения посмотрите Руководство по Языку AppleScript. AppleScript обращается к проблеме того, чтобы быть специфичным для задачи необычным способом. Основной язык делает очень мало и не имеет никаких специфичных для задачи функций вообще. То, что это действительно делает, служат основой, в которую можно включить любое число специфичных для задачи функций, а именно, приложения. В зависимости от которого объекта Вы обращаетесь к, изменения словаря. Например, когда говорящий со Средством поиска, можно говорить о дисках, папках и файлах; когда говорящий с Почтой, можно говорить о сообщениях и почтовых ящиках; и т.д. Другими словами, приложения ответственны за обеспечение специфичных для задачи функций для задач, о которых они знают; AppleScript обеспечивает основную инфраструктуру и связующее звено для передачи информации от одного приложения до другого. ОсновыИнтерфейс сценариев Вашего приложения распространен к остальной части мира, и система и человеческие пользователи, Вашим словарем. Это перечисляет все объекты и управляет, чтобы Ваше приложение поняло, вместе с тем, как они связаны и простые объяснения того, что они имеют в виду. AppleScript читает его, чтобы определить, как скомпилировать сценарии, и это - основная ссылка для сценаристов, хотящих знать то, что может сделать Ваше приложение. (Это не означает, что это должна быть единственная ссылка, которую Вы обеспечиваете. Это не было должно; идеально, Вы также обеспечите документацию и демонстрационные сценарии. Словарь требуется, все же.) В этом разделе описываются некоторые общие руководящие принципы для создания Вашего словаря. Более поздние разделы содержат определенное руководство по определенным темам, таким как объекты или команды. Мнение варьируется на том, необходимо ли записать целый словарь сначала и затем реализовать его, или запись и реализация многократно поразрядно. У обоих есть их преимущества – прежний упрощает быть непротиворечивым, последний упрощает поставлять в любое время – выбирают, какой бы ни работает на Вас. Словари в настоящее время прибывают в три различных формата:
Для наблюдения словаря как, пользователь был бы, открыть его в Редакторе сценариев: запустите Редактор сценариев, выберите Open Dictionary из меню File и выберите Ваше приложение. Если Вы плохо знакомы со сценариями, исследуете некоторые другие словари. Средство поиска является хорошим примером: это следует инструкциям обоснованно хорошо и достаточно сложно, чтобы быть интересным, но достаточно простым быть понятным. Перед началомДумайте о scriptability ранее, а не позже.Размышление о том, как подать Вашу заявку, scriptable рано в процессе проектирования, сэкономит Вам продолжительное время и муки. Во-первых, всегда проще реализовать опцию, планирующуюся с начала, чем соединить болтом его на в конце. Во-вторых, и что еще более важно, scriptability вынуждает Вас думать о Вашей модели. Если Вы знаете, каковы Ваши концептуальные объекты модели, можно создать объекты реализации то соответствие. Это не только делает scriptability проще, это - просто хорошая практика проекта. Знайте свою модель.Scriptability означает быть специфичным для задачи, и быть специфичным для задачи означает показывать вещи, которые делает Ваше приложение: т.е. Ваша модель. Поэтому важно, что у Вас есть твердое схватывание Вашей прикладной модели. Каковы объекты и команды, определяющие то, что Ваше приложение делает, и как они касаются друг друга? Например, Почта имеет почтовые ящики, почтовые ящики содержат сообщения, сообщения имеют адресатов и текст и могут быть отправлены или переданы и т.д. Заметьте, что это ничего не говорит о кнопках, командах меню или диалоговых окнах. Помните: модель, не просматривают. Если Вы не можете выяснить то, что Ваша модель, или думайте, что Вы не имеете один, Вы, вероятно, или смотрите на нее неправильный путь или Ваша работа потребностей проектирования приложений. Говор с Вашими пользователями может быть полезным здесь – спрашивают их, что они делают и прислушиваются к общим объектам и командам. Знайте своих пользователей.Быть специфичным для задачи означает быть специфичным для задачи пользователем, не специфичный для задачи программист. Думайте о своем приложении с точки зрения вещей, которые пользователи делают с ним, не с точки зрения того, как Вы, конструктор, заставляете вещи произойти негласно. Для любого объекта или команды в Вашем словаре, для обычного пользователя Вашего приложения должно быть сразу очевидно, каково это. Если у Вас есть очень большое и сложное приложение, знание, что Ваши пользователи также услужливы в приоритезации, что сделать scriptable сначала. Вы не обязаны сделать все это сразу. Знайте AppleScript.Вы не должны изучать AppleScript в каждой подробности, но необходимо разработать чувство для синтаксиса команды типового приложения, и для того, что AppleScript сделает для Вас (и Вы поэтому не должны делать себя). Руководство по Языку AppleScript является официальной документацией Apple для AppleScript, но существует много сторонних книг, доступных также. Игрение с scriptable приложением, следующим инструкциям, таким как Средство поиска, является также хорошим способом учиться. Используйте среду разработки приложения.Значительная часть реализации scriptability должным образом включает реализующее стандартное поведение. Используя платформу устранит большую часть тяжелой работы и сократит количество ошибок (или по крайней мере гарантирует, чтобы у Вас были те же ошибки как все остальные использующие платформу). Какао Apple и PowerPlant Метрауэркса оба имеют хорошую поддержку scriptability. Разработка Вашего словаряОстаньтесь на задаче.Да, мы сказали это прежде, но это важно. Хороший scriptability фокусируется на задачах, которые значимы для пользователя. Если Вы говорите о кодах ошибки, битовых полях или других вещах, которые обычно не видит пользователь, то Вы смещаетесь вне задачи. Также помните, что задачи основываются на модели – т.е., что – не представление, которое является как. Если Вы говорите о кнопках и меню (и Вы не работаете над создающим интерфейс приложением), то Вы пытаетесь написать сценарий представления. Некоторые сценарии представления важны – видят Сценарии Представления – но это не фокус. Если Вы испытываете затруднения, думающие о задачах, помните эти две директивы вместо этого: говорите с пользователем, не программистом; и сценарий модель, не представление. Если бы Вы испытываете затруднения, выражающие Вашу модель в способе, которым пользователь считал бы нормальным, это может быть знак что Ваша фиксация потребностей модели. (Это может также быть знак, что Вы нуждаетесь в перерыве, так попытка это, также.) Это иногда происходит: просмотр Вашей модели от различного угла может показать проблемы, которые не были очевидны прежде. Возможно, одна сложная работа должна быть разделена, или два объединенных, или возможно Вы не понимали домен задачи, а также Вы думали, что сделали. Разрешение и фиксирует его и фиксирует его в Вашем графическом интерфейсе также, если Вы можете – Вы иметь лучшее приложение для него. Будьте объектно-ориентированы.Быть объектно-ориентированным означает, что Ваши сценарии главным образом организованы вокруг объектов, не команд. Объекты могут реагировать на команды – документы могут быть распечатаны, сообщения могут быть отправлены, и т.д. – но фокус находится на объектах, не командах. Это обладает несколькими преимуществами: Во-первых, это соответствует, как работает остальная часть AppleScript, и в некоторой степени Macintosh в целом. Это является поэтому более непротиворечивым и имеет больше смысла пользователям. Во-вторых, это позволяет Вам использовать различные функции AppleScript, как В-третьих, это позволяет Вам создать меньший, более понятный словарь, потому что можно применить мультипликативный эффект: Будьте точны.Удостоверьтесь, что Вы фактически поддерживаете все, что Вы утверждаете, что в Вашем словаре. Будьте консервативны в своем словаре, если Вы должны; sdef обеспечивает способ скрыть условия, если Вы чувствуете, что они еще не готовы к прайм-тайму. (Так делает более старое На подобной точке удостоверьтесь, что типы, которые Ваш словарь определяет для свойств и параметров, точны. Примите во внимание, что точный отсылает к сценаристу (т.е. пользователь) перспективу, не конструктор. Например, нет никакого файла типа URL в AppleScript, но существует тип файла, поэтому даже при том, что Ваше приложение выбирает параметр как Не заново изобретайте колесо.Чем меньше Вы изобретаете, тем более непротиворечивый Вы будете, и меньше Ваших пользователей должно будет учиться.
Заключение к этому - то, что Вы не должны будете, вероятно, определять многие свои собственные команды. Стандартные команды заботятся об основных прикладных функциях и объектном манипулировании ( Нормально делать меньше, чем Ваш GUI.Некоторые операции, возможные через Ваш графический интерфейс пользователя, могут не быть подходящими для интерфейса сценариев, потому что они принимают уровень динамического взаимодействия, которое просто не практично – например, рисование эскизов от руки или вычищение через фильм. Не чувствуйте себя обязанными включать функцию в Ваш интерфейс сценариев просто, потому что он существует в Вашем графическом интерфейсе. Кроме того, это может не быть практично для создания всего в приложении scriptable одновременно: у Вас нет времени, Вы ожидаете, что функция изменится в следующем выпуске, безотносительно. Обеспечьте то, что Вы можете, сделать его полезным, и делаете остальных позже. Нормально делать больше, чем Ваш GUI.Scriptability является отличным способом представить функции в Вашем приложении, не имея необходимость реализовывать графический интерфейс для них. Иногда эти функции неявны в том, как работает AppleScript: например, Средство поиска не имеет никакой команды для удаления файлов, удовлетворяющих условию, но Получите обратную связь.Найдите некоторых пользователей, заботящихся о сценариях, позволяющих им играть с Вашим приложением и слушать то, что они говорят. Уже можно найти некоторых в штате – тестеры имеют тенденцию любить сценарии, потому что это делает их задания проще. Когда Вы думаете, что сделаныТест, тест, тест.Потребности Scriptability, тестирующие точно так же, как любая другая функция. Знание AppleScript будет очень полезно здесь, не именно так можно записать сценарии, но таким образом, можно действительно осуществить язык. Вновь прибывшие часто не схватывают импликации объектных спецификаторов и создают команды, не работающие с диапазонами или фильтрующие пункты. Получите больше обратной связи.Внутренняя разработка и тестирование - все хорошо и хороший, но ничто не заменяет реальное использование. Позвольте реальным пользователям попробовать Ваше scriptable приложение. При обнаружении ошибки в scriptability после поставки можно все еще измениться, он, не повреждая существующие сценарии путем использования синонимов – видит sdef страницу справочника для подробных данных. СтильВ этом разделе описываются инструкции по стилю для Вашего словаря: организация, как назвать вещи, комментирует стиль и т.д. Общие указания.Используйте комплекты в качестве надлежащих.Словари повреждаются в комплекты, которые являются кластерами связанных классов и команд. Они просто для преимущества читателя и не оказывают влияния на Ваше приложение или AppleScript. Нет никакого технического предела, или верхнего или ниже, на числе элементов в комплекте, но десять - пятнадцать считается удобным размером. Однако не вызывайте искусственные различия только, чтобы разбить большой комплект или объединить маленькие – окончательная точка должна помочь пользователю найти вещи. Поместите определенные с помощью системы комплекты сначала, сопровождаемый Вашим собственным. Сортируйте их в порядке общности или частоты использования, или, приведя это к сбою, в алфавитном порядке. В комплекте, и для свойств в классе, элементов порядка некоторым разумным способом. Для достаточно небольшой группы можно сортировать важностью или частотой использования, но это может быть трудно судить. Алфавитное упорядочивание всегда является хорошей нейтрализацией. В команде упорядочьте параметры в пути, который целесообразен в предложении. Если это невозможно, используйте алфавитный порядок. Будьте точны с типами.При указании типа свойства или параметра, используйте наиболее определенный тип, который и точен и значим для пользователя. Часто, это - простой выбор определенного с помощью отдельного приложения класса или примитивного типа данных, но иногда это более интересно:
Вещами, относящимися к объектам, должны быть объекты.Если свойство или параметр относятся к объекту, его тип должен быть фактическим объектом, никогда данные, показывающие объект. Рассмотрите эту команду от многих веб-браузеров, повреждающую эту инструкцию (и несколько других): CloseWindow [Целое число ID] - ID окна для закрытия. (Используйте-1 для самого верхнего), [Строка заголовка] - Заголовок окна для закрытия. Корректный способ сделать это должно определить a Несколько слов о файлах Файлы в AppleScript считаются объектами. Поэтому свойства и параметры, указывающие на файлы, должны также быть Выбор элементов языкаСвойства по сравнению с элементамиОбъекты могут содержать другие объекты; их или называют свойствами ( Свойства по сравнению с командамиУстановка Sometimes свойство может вызвать непосредственное изменение на экране. В решении, использовать ли свойство в этой ситуации, полезное правило: Когда действие будет инициироваться, используйте команду; когда атрибут изменяется (даже если он приводит к непосредственным видимым результатам), используйте свойство. Другой способ смотреть на это состоит в том, если видимое изменение непосредственно, используйте свойство, но если действие имеет продолжительность, используйте команду. Например, следующая команда вызывает непосредственное изменение на экране: set the font of the third paragraph to "Courier" Даже при том, что установка свойства шрифта создает видимое изменение, шрифт является все еще атрибутом текста, не действием. С другой стороны, называя свойство или перечислитель set playing to true set [the] status to playing play the movie "Wowie Zowie" start playing the movie "Wowie Zowie" Обратите внимание на то, что команды ПеречисленияПеречисление является рядом констант (перечислители), представляющие фиксированный набор выбора. Используйте перечисление в качестве типа параметра или свойства каждый раз, когда существует выбор, который будет сделан из определенного списка возможностей. Это помогает пользователю видеть, что существует выбор и сообщает им точно, каков выбор. Таблица 1: перечисления
Именование правилИспользуйте пользовательские термины, не условия реализации.Помните, что Вы говорите с пользователем и должны поэтому использовать термины, которые они сочтут знакомым. Идеально, термины, использованные в Вашем графическом интерфейсе, сценариях и документации, должны все соответствовать. Используйте тест.AppleScript позволяет Вам добавлять или удалять слово set the service to "America Online" if the priority is high then ... Не использовать Используйте нижний регистр.Используйте все строчные буквы для своих условий, за исключением требуемого для имен собственных, торговых названий и акронимов. Таблица 2: капитализация
Используйте многократные слова, не InterCaps или подчеркивания.Если срок состоит больше чем из одного слова, разделите слова пробелами. Не присоединяйтесь к словам вместе с прописными буквами или подчеркиваниями. Снова, торговые названия являются исключением к этому. Таблица 3: примеры.
Условия должны соблюсти правила идентификатора AppleScript.Каждое слово в сроке должно быть допустимым идентификатором AppleScript. Это означает, что они должны начать с буквы или подчеркивания, и сопровождаться любым числом букв, числами или подчеркиваниями, то же как подобные языкам C. Пунктуация не позволяется; подчеркивания не рекомендуются, как упомянуто выше. Не создавайте команды, которые похожи на объекты или объекты, которые похожи на команды.Создание условий, которые похожи на другие части речи, смутит сценаристов и приведет их пробовать вещи, которые не будут работать. Рассмотрите команду Standard Additions Не запускайте имена свойства с обязательных глаголов.Когда свойство появляется посреди предложения, стартовые имена свойства с глаголами приводят к беспорядку. Например, именование свойства set disable call waiting to true if disable call waiting then ... Кроме того, имя отключают ожидание вызова, похож на команду. Пользователь мог бы испытать желание сказать disable call waiting Это будет компилировать и работать, но ничего не отключает – это просто возвращает текущую стоимость свойства. Можно предотвратить такой беспорядок при помощи причастия вместо этого. Это несколько более ясно: set call waiting enabled to false if not call waiting enabled ... Еще лучше должен был бы назвать свойство set call waiting to enabled if call waiting is disabled ... Избегите начинать условия с ключевых слов языка.Используя ключевое слово языка, поскольку первое слово в сроке может лишить возможности использовать то ключевое слово в определенных контекстах. Например, рассмотрите заявление, определяющее a Возможно успешно начаться, условия с ключевыми словами – рассматривают команду Standard Additions Таблица 4: Зарезервированные слова в AppleScript 1
Избегайте использования 'находится' в булево свойстве и названиях параметра.Это - конкретный случай предыдущего правила: Кроме того, синтаксический анализатор AppleScript надевает несколько специальных приемов на булево свойства и параметры, заставляющие их читать лучше без. AppleScript изменится send message "Fred" queuing true это компилирует в send message "Fred" with queuing Кроме того, тесты булево свойств могут быть записаны особенно: вместо высказывания if miniaturized of window 1 is true then ... if window 1 is miniaturized then ... Если назвали свойство Избегайте использования на имя.
Избегайте использования 'конца' как первого слова в команде.Несколько AppleScript создают использование Таблица 5: Примеры условий.
Стиль комментарияЛюбой срок словаря может иметь связанный комментарий (sdef's и терминология комплекта
ОбъектыПоскольку AppleScript таким образом объектно-централен, определяя разумную иерархию объектов, и иерархия классов и создание его вести себя всеми стандартными способами являются, возможно, самой важной частью создания хорошего интерфейса сценариев для Вашего приложения. Перефразировать Фреда Брукса немного: Покажите мне свой код и скройте свои объекты, и я буду продолжать быть мистифицированным. Покажите мне свои объекты, и мне обычно не будет нужен Ваш код; это будет очевидно. Разработка Ваших объектовКак всегда, основное правило быть определенной задачей. Покажите объекты, имеющие прямое влияние на вещи, которые пользователь сделает с Вашим приложением. Представьте модель, не интерфейс. Не показывайте подробные данные реализации – пользователи не будут заботиться, или хуже, это смутит их. Существует две различных иерархии для рассмотрения: иерархия наследования – что ведет себя как то, что – и иерархия вместимости – кому принадлежит что. Заставьте свои иерархии соответствовать то, что ожидал бы пользователь. НаследованиеAppleScript поддерживает единичное наследование, таким образом, можно определить класс, чтобы быть точно так же, как другой класс, но с дополнительными свойствами или элементами. Подкласс не должен определять новые части; иногда просто быть различным классом достаточно. Почта Используйте наследование для эффективного уменьшения словаря путем удаления избыточной информации. Если несколько классов совместно используют общие элементы или свойства, заставьте их всех наследоваться от базового класса, определяющего общие части. Не используйте наследование, если класс имеет только одного потомка, потому что это просто усложняет словарь. ВключениеAppleScript определяет два вида отношений включения: элементы и свойства. В условиях моделирования связи сущностей элемент к - многие отношение, и свойство является или атрибутом или к - одно отношение. (Моделирование связи сущностей различает примитивные данные и другие объекты; AppleScript не делает.) В то время как может быть любое число элементов, свойство является единственным значением. Особые случаи, такие как zero-one или любое число в диапазоне могут быть эмулированы с помощью свойств или элементов с дополнительным поведением, как показано здесь: Таблица 6: терминология Включения.
В целом предпочтите элемент свойству, значение которого является списком объектов – это является более непротиворечивым и является проще реализовать. В частности не делайте чего-то вроде этого: class widget (pl. widgets)... class box: property widgets: list of widget Это является особенно злым, потому что это делает При реализации такого свойства (см. стандарт Объектные спецификаторыВсе объекты в приложении, кроме корня
длина Word 1 каждого абзаца документа «Проект Смита»
Подчеркнутые части показывают каждый компонент. Заметьте, что каждый компонент использует различную ключевую форму. Полный набор ключевых форм перечислен в таблице ниже. Формы ключа Most подразумевают существование определенного свойства для того объекта: если объект имеет то свойство, то это должно поддерживать ту ключевую форму, и наоборот. Таблица 7: объектные спецификаторы
Кроме того, допустимые ключевые формы для контейнера определяются природой контейнера и его элементов. Это также определяет, какие расположения, если таковые имеются, значимы для В упорядоченном контейнере пользователь определяет точно, как располагаются элементы. Любой элемент может быть помещен прежде (или после) любое другое использование элемента В неупорядоченном контейнере сами данные определяют порядок элементов – например, алфавитный порядок – или просто нет никакого определенного порядка. В то время как можно попросить В бесчисленном контейнере не знает приложение, сколько там элементы. Все индексные формы бессмысленны, как идея Таблица 8: объектные типы спецификатора
Ключевые формыЭтот раздел предоставляет подробную информацию поведения для каждой из ключевых форм. Это не дает подробные данные использования или синтаксис; для этого см. Главу 5 Руководства по Языку AppleScript. Произвольный При поддержке этой ключевой формы она должна возвратить по-настоящему случайный объект, не всегда того же самого. Эта ключевая форма полезна каждый раз, когда для сценария нужно случайное поведение. Например, сценарий мог выбрать случайную подпись в Почте путем высказывания Каждый
Фильтр По историческим причинам Фильтр считают его собственной ключевой формой, хотя это было бы больше с точностью до, думают о нем как о модификаторе к основанным на индексе ключевым формам (индекс, произвольный, средний, диапазон и каждый). В то время как ключевая форма фильтра чаще всего используется с тестом на свойстве объекта (такой как paragraphs where it starts with "The" albums where it contains photo "White Rabbit" documents whose first paragraph contains the word "Metacortex" В теории любое булево выражение должно быть допустимым, но AppleScript в настоящее время не может иметь дело с вызовами функции в выражении фильтра. Если объекту на рассмотрении не указывали атрибут в фильтре, это не ошибка – полагают, что значение ID Возвращает отдельный объект чей Индекс Элемент indicies должен соответствовать модель пользователя первого для длительности или упорядочивание грудь-спина. (Фактически, Если элементы не упорядочиваются, как определено выше, то идеально индекс должен соответствовать, как элементы в настоящее время выводятся на экран. При сбое этого выберите непротиворечивый порядок – говорят, алфавитный – и использование это. Именованный Возвращает отдельный объект чей Диапазон Диапазоны могут быть указаны или как два indicies или как два объекта конечной точки, включенные в диапазон. Если или конечная точка не существует, или если они не находятся оба в том же контейнере, возвратите ошибку. Инструкции для значения indicies применяются что касается индексной ключевой формы выше. Порядок конечных точек не имеет значения – всегда возвращают объекты в порядке, самом низком индексе к самому высокому. Например, Текст представляет особый случай: из-за того, как работает его включение, возможно указать две конечных точки, где каждый в другом. (Обычно, это было бы недопустимым диапазоном, потому что два объекта будут иметь различные контейнеры.) Для разрешения этого найдите начало обеих конечных точек, запуститесь с одно самое близкое к началу текста, и затем пойдите до конца другого объекта конечной точки. Например: set t to "Through three cheese trees three free fleas flew" words from paragraph 1 to word 3 of t --> {"Through", "three", "cheese"} characters from character 10 to word 2 of t --> {"h", "r", "e", "e"} Даже если диапазон содержит только один объект (или, в случае каждого, никаких объектов), спецификаторы диапазона всегда возвращают список. Если ссылка на диапазон используется в качестве контейнера для другого свойства или объекта, результат состоит в том что свойство или объект каждого элемента в диапазоне. Например: name of files 2 thru 3 of home --> {"Memory report", "BBEdit update.dmg"} Список значений возвратился, должен всегда быть параллельным списку, который был бы возвращен для диапазона. Т.е. это должно быть в том же порядке и иметь то же число значений. Например: every duck --> {mallard "Daffy", pintail "Marvin", decoy duck "Q-36"} name of every duck --> {"Daffy", "Marvin", "Q-36"} Даже если некоторые объекты не имеют указанного свойства или элемента, это применяется. Для таких объектов возвратиться feet are webbed of every duck --> {true, true, missing value} Если указанный элемент является другим диапазоном, то результатом является список списков. Например: every duck of every flock --> {{mallard "Ned", mallard "Ted"}, {pintail "Ann", pintail "Dan"}} Относительный Относительные спецификаторы имеют форму Элементы и наследованиеКонтейнер не должен определять отличное отношение элемента для каждого класса, который он содержит – он может подразумевать их наследованием. Если объект содержит объекты некоторого класса, спецификатор может указать любой подкласс, и запрос будет ограничен объектами того класса. Например, рассмотрите фиктивное заявление DuckTracker: утка класса: … класс canvasback: наследовался от утки … дикая утка класса: наследовался от утки … шилохвость класса: наследовался от утки … приложение класса утка элемента индексом, по имени … Даже при том, что это только явно указывает Возврат объектных спецификаторовНа объект в Вашем приложении можно обычно ссылаться одним из нескольких способов. Например, Общее правило для формы для использования:
Класс объектного спецификатора должен быть фактическим классом объекта. Продолжая пример DuckTracker сверху, это было бы чем-то как Необычные проблемыMany-one и many-many отношения В большинстве приложений все объектные отношения являются непосредственными или one-many, результат, являющийся, что все объекты содержатся точно одним другим объектом. Некоторые приложения, однако, имеют many-one или many-many отношения, таким образом, отдельный объект может появиться в нескольких различных контейнерах. iPhoto ведет себя как это: a Во-первых, необходимо поддерживать команды Во-вторых, действительно ли это возможно для Ваших объектов (вызовите их фотографии, для продолжения аналогии iPhoto) не принадлежать какому-либо определенному контейнеру (альбом)? Например, в iPhoto, фотография может не быть ни в каком альбоме. Если это верно, тогда необходимо будет определять единственный основной контейнер, содержащий все фотографии; они могут быть добавлены к и удалены из альбомов оттуда. (использование iPhoto Несимметричные спецификаторы В целом, если объект получен определенным свойством, то свойство объекта должно соответствовать. Например, В некоторых приложениях, однако, это может не иметь место. Как правило, причина состоит в том, что объект может иметь больше чем одно допустимое имя (или ID, и т.д.). Например, Средство поиска Совершенно приемлемо для многократных ключевых данных возвратить тот же объект. (Если это создает случаи неоднозначности, то посмотрите ниже.) Однако у Вас должен быть некоторый способ для пользователя обнаружить все различные данные, которыми может быть указан объект. Основное свойство (например, Групповые ключевые формы Как правило, имена и IDs уникальны, по крайней мере, в в контейнере, таким образом, существует только один объект Для таких приложений вызовите быть непротиворечивыми о правиле типов возврата: названный и индексированные ключевые формы обычно возвращают отдельный объект, таким образом, они должны все еще сделать так даже перед лицом неоднозначных объектов. Если один объект является лучшим соответствием, чем другой, возвратите тот; если нет никакого лучшего соответствия, возвратите первый. Однако гарантируйте, что пользователи могут выбрать все соответствующие объекты с помощью выражения фильтра некоторого вида, такой как Стандартные классыСуществует несколько стандартных классов, которые должны определить приложения. Единственный, который должно определить приложение, приложение текст имени [r/o] - Имя приложения. булевская переменная frontmost - действительно ли это - frontmost приложение? текст версии [r/o] - Строка короткой версии приложения. выбор окно элемента документ элемента
документ текст имени [r/o] - Имя документа. измененная булевская переменная [r/o] - Документ имеет несохраненные изменения? файл файла [r/o] - Файл для документа; если документ никогда не сохранялся, может быть отсутствующее значение. Документ приложения. окно текст имени [r/o] - Заголовок окна. прямоугольник границ - ограничительный прямоугольник окна. closeable булевская переменная [r/o] - Окно может закрыться? minimizable булевская переменная [r/o] - Окно может быть минимизировано? минимизируемая булевская переменная - окно минимизируется? булевская переменная изменяемого размера [r/o] - Окно может быть изменено? видимая булевская переменная - действительно ли окно видимо? zoomable булевская переменная [r/o] - Окно может масштабироваться? масштабируемая булевская переменная - окно масштабируется? Окно, которое может быть окном документа или палитрой, но не листом или модальным диалоговым окном. элемент класс класса [r/o] - Класс объекта. запись свойств - Все свойства объекта. Корень иерархии наследования и окончательный наследователь всех классов. Посмотрите ниже для полных описаний Стандартные свойстваклассКласс объекта. Это должно всегда быть точным классом, никогда суперкласс, и всегда только для чтения. Вы не должны явно определять контейнерОбъекты в иерархии вместимости могут определить контейнерное свойство, указывающее на их вложенный объект. (Это свойство является чисто дополнительным, потому что часто трудно реализовать.) Точное имя зависит от возможных контейнерных классов: если существует точно один, назовите свойство тем же как класс. Например, сообщения в Почте всегда принадлежат почтовому ящику, и поэтому имеют a Контейнерное свойство только для чтения. Запись в контейнерное свойство для перемещения объектов не рекомендуется; используйте Объекты во много-к - содержаниеЕсли содержание объекта может быть представлено как единственное значение, оно должно определить a все содержаниеРекурсивные контейнеры – т.е. объекты, имеющие их собственный класс как элементы – должны определить IDЗначение, однозначно определяющее объект. IDs никогда не локализуется и обычно находится не под управлением пользователя и поэтому только для чтения. Они должны, по крайней мере, быть уникальными в контейнере – в большинстве приложений, они уникальны в целом приложении – и должны остаться допустимыми для, по крайней мере, времени жизни порядка подачи заявки или объекта, какой бы ни заканчивается сначала. Тип имеющий значение может быть чем-либо: общим выбором является целое число, UUID или идентификатор пакета. Тип имеющий значение для любого определенного класса должен всегда быть тем же. имяОбъект свойстваВсе объекты должны иметь a получите свойства абзаца 4 - шрифт Возвратов, размер, стиль, и т.д. установите свойства абзаца 4 к {шрифт: «Helvetica», size:14} - Наборы просто шрифт и размер. КомандыКоманды в AppleScript определяются независимо от любого определенного объекта; класс может тогда перечислить команды, на которые он отвечает. К Java и программистам Objective C, команды поэтому напоминают протоколы больше, чем функции членства. В настоящее время нет никакого прямого способа определить команду по-другому (скажите с различными параметрами) для определенного класса. Лучшее, которое можно сделать, должно или перечислить все возможные параметры и использовать комментарии для высказывания, какие параметры значимы, когда, или определить разделяют команды различными именами. Разработка Ваших командБудьте подобны английскому языку.Команды AppleScript обычно похожи на обязательные английские предложения: глагол [существительное] [значение предлога]... сохраняет передний документ в файле «Goofballs:Razor»
Попытайтесь эмулировать этот стиль со своими собственными командами. Однако примите во внимание, что это - инструкция, таким образом, Ваш английский стиль не должен быть совершенным. Кроме того, Вы ни в коем случае не обязаны поддерживать все возможные английские предложения. Синонимы прекрасны, где они целесообразны, но не идут за борт. Не изобретайте команды, если Вы не имеете к.Попытайтесь использовать стандартные команды, где это целесообразно, и только создайте свои собственные команды, если существует ясная потребность. Например, Почта отправляют, действие не вписывается в стандартные команды никаким очевидным способом, таким образом, это получает свою собственную команду. С другой стороны, Средство поиска не определяет a Исключительные возвращаемые значения спецификаторов, диапазоны и 'каждый' возврат списки.В целом команды, возвращающие результат, должны возвратить ту же форму результата как прямой спецификатор параметра: исключительные спецификаторы возвращают пустые значения, диапазон и -- Singular specifiers like index return a value. get name of person 1 --> "Fillmore" -- Range and "every" specifiers return a list... get name of every person --> {"Fillmore", "Poppleton"} -- ...even if there is only one object... get name of every person whose name starts with "P" --> {"Poppleton"} -- ...or even no objects for "every"... get name of every person whose name starts with "Q" --> {} -- ...but both endpoints must exist for a range. get name of people 1 through 17 --> Error: Can't get person 17. Команды, нарушающие это правило – например, учитывая диапазон они иногда, возвращают значение, и иногда список – является раздражающим для использования, потому что они требуют, чтобы пользователь записал логику для обнаружения то, что произошло. Дополнительную информацию см. в Ключевых Формах. Используйте цель.Предмет самого внутреннего Используйте ошибочные возвращаемые параметры, не коды состояния.Возвращаемое значение команды AppleScript должно всегда быть значением или объектным результатом команды, никогда код состояния или сообщение. Если нет никакого результата – т.е. команда только выполняет действие – ничего не возвращают. Для сигнализации ошибки возвратите ненулевой код ошибки из обработчика событий или установите Таблица 9: Обработка ошибок.
Пользователя, отменяющего работу, считают ошибкой; использовать Никакое взаимодействие не требуется.Сценарии команд не должны требовать никакого взаимодействия с пользователем, так как часть точки сценариев должна создать полностью автоматизированные функции. Если информация была опущена от команды, такой как попытка к, приемлемо взаимодействовать с пользователем Прежде, чем попытаться взаимодействовать с пользователем в ответ на команду сценариев, вызвать Управляйте числом параметров.Иногда можно реализовать команду, содержащую много опций, для которых Вы могли бы испытать желание сделать отдельные булевы параметры. Когда число параметров является маленьким, выглядит хорошим быть в состоянии сказать с a, b, и c. Злоупотребление этим методом, однако, может привести к громоздким словарным статьям для этих событий с длинными списками параметров. Существует два решения этого: или сделайте параметр или параметры, принимающие список перечислителей для опции или набора опций, или повреждающиеся, команда в разделяют команды более фокусируемой функциональностью, сокращая число вариантов для каждого. Например, предположите, что пакет статистики создает единственную команду для выполнения любого типа анализа с большим количеством параметров, как это: проанализируйте набор данных - 25 булевых параметров Было бы лучше разделить аналитическую возможность на многократные команды, каждого с небольшой группой булевых параметров, такой как кластерный набор данных коррелируйте набор данных соответствуйте изгибают набор данных и т.д. Если Вы оказываетесь с параметрами, которые никогда не могут появляться вместе, это - знак, Вы, возможно, должны разбить команду. Дополнительной информацией не является ошибка.При получении команды с дополнительными параметрами, Вы не ожидали, просто игнорируете их и не возвращаете ошибку. Точно так же не потрудитесь проверять Стандартные командыСтандартный Комплект определяет 15 команд. Приложения должны использовать их в предпочтении к созданию их собственного. Не все команды значимы для всех приложений. Несоответствующие (например, В большинстве случаев параметры спецификатора типа могут указать любое число объектов. Убедитесь, что Ваши команды функционируют правильно с исключительным, диапазоном, и Несколько слов о параметрах положения Несколько команд берут параметры спецификатора расположения типа. Это может быть спецификатором точки вставки или спецификатором контейнерного объекта, и может даже быть диапазоном в большинстве случаев. Точка вставки является расположением, где может быть вставлен объект: add photo "On the beach" to end of album "Vacation" move paragraph 1 to after paragraph 3 make new word at beginning of every paragraph with data "Note:" Спецификатор контейнерного объекта является контейнером, в котором объекты состоят в том, чтобы быть добавлены, перемещены, сделаны, или что бы то ни было. Приложение выбирает разумное расположение в контейнере. Снова, спецификатор может быть диапазоном или add photo "On the beach" to album "Vacation" duplicate message 1 to every mailbox whose name contains "backup" Некоторые контейнеры могут принять только контейнерные спецификаторы; посмотрите Объектные Спецификаторы для подробных данных. добавитьдобавьте спецификатор [к спецификатору расположения] - Возвращает спецификатор объекту в его новом расположении. Добавляют указанные объекты к (позиция в a) контейнер и возвращают свои новые расположения. Если близкоблизкий спецификатор [сохраняющий да | не | спрашивает] Закрывает указанные объекты. Документы и окна должны быть closeable, если они существуют; приложения могут применяться количествоспецификатор количества - Возвращает число указанных объектов. Возвращает число указанных объектов. Эта команда является исключением к правилу списков возврата диапазонов; удалитьудалите спецификатор Удаляет указанные объекты из любых контейнеров, в которых они могут быть и уничтожают их. копиядвойной спецификатор [к спецификатору расположения] [с записью свойств] - Возвращает спецификатор для нового объекта. Копирует указанные объекты к указанным расположениям, дополнительно изменяя некоторые их свойства с помощью существуетсуществует спецификатор - Если объект существует, ложь если нет, возвращает true. Возвращает true, если все указанные объекты существуют, или ложь, если они не делают. В отличие от большинства команд, указание несуществующих объектов не является ошибкой; это просто означает, что результатом является ложь. Как добратьсяполучите спецификатор [как класс] - Возвращает значение указанного объекта. Возвращает значение указанных объектов. Вы не должны определять сделатьсделайте [новый] класс [в спецификаторе расположения] [с записью свойств] [с данными что-либо] - Возвращает спецификатор новому объекту. Делает новый объект и возвращает спецификатор ему. переместитьсяпереместите спецификатор в спецификатор расположения - Возвращает спецификатор объекту в его новом расположении. Перемещает указанные объекты в новое расположение и возвращает спецификаторы для них в их новых расположениях. открытыйоткрытый файл | список файлов - Возвращает спецификатор создаваемому объекту приложения. Открывает указанные файлы и возвращает новые объекты приложения для них – вероятно, печатьспецификатор печати [со свойствами распечатывают настройки] [распечатайте диалоговую булевскую переменную] Распечатывает указанные объекты. Для большинства приложений объекты всегда являются документами, но это не требуется. Поддержка выходвыход [сохраняющий да | не | спрашивает] Выходит из приложения. Значение удалитьудалите спецификатор [из спецификатора] Удаляет указанные объекты из их контейнера. Если сохранитьсохраните спецификатор [в файле] Сохраняет указанные объекты, возможно в указанном файле. выбратьвыберите спецификатор Выбирает указанные объекты в пользовательском интерфейсе. Посмотрите Сценарии Выбора для подробных данных о поведении. наборспецификатор набора для оценки - Возвращает присвоенное значение. Устанавливает указанные объекты в значение и возвращает присвоенное значение, т.е. значение полностью оцененный Сценарии представленияПосле всего этого разговора о сценариях модели, не представления, этот раздел, вероятно, стал чем-то вроде удивления. Тем не менее, мелкая сумма ориентированного на представление scriptability ценна. Одна из вещей, которые пользователи делают со сценариями, состоит в том, чтобы добавить новые команды к их приложениям, и чтобы сделать это эффективно, они должны быть в состоянии узнать то, что видимо и что выбрано. Сценарии WindowsКак упомянуто в Объектах, окна должны быть индексированы по всей длине, таким образом, Если у Вас есть больше чем один вид окна – говорят, окна документа и окна палитры – создают отличающийся Windows, что объекты модели дисплея должны были соответственно назвать свойства для получения объекта (или объекты), что они выводят на экран. Наиболее распространенный случай этого является окнами документа, которые должны иметь a Активировать командаЧтобы активировать окно – т.е. выявить его – используют Сценарии выбораВыбор, в сценариях условий, относится только к выбранным объектам модели. Не пытайтесь представлять выбор в диалоговых окнах. Не все приложения должны поддерживать сценарии выбора – для некоторых очень простых, таких как подобные панели управления приложения, это может не быть значимо. Существует два способа работать с выбором: Избранная команда
Каждый раз, когда Вы Свойство выбора
Другие объекты, имеющие их собственный выбор, должны также иметь a Как можно больше, Выбор текстаВ основанной на тексте объектной модели значение выбора является спецификатором, дающим расположение выделенного текста, не фактического текста – например, Если выбор является диапазоном символов, то необходимо возвратить диапазон некоторого вида, такой как Некоторые приложения достаточно знают о модели текстового объекта для создания отчетов о выборе с точки зрения модулей, больше, чем символы. Например, если пользователь выбрал третий абзац, Если Вы поддерживаете непересекающиеся текстовые выборы, то Таблица 10: выбор текста.
(В реальной жизни различные спецификаторы продолжили бы с чем-то как документа 1. Это было удалено для краткости.) Запись в выборНачиная с записи в само свойство выбора просто изменяет то, что выбрано, необходимо записать в свойство или элемент выбора для изменения фактического текста. Как упомянуто выше, Таблица 11: Запись в выбор.
Перемещение выбораТекстовая модель позволяет перемещать выбор относительно себя при помощи Таблица 12: Перемещение выбора
Как указано выше, использование Необычные проблемыМножественные выборы в одном окне Некоторые приложения имеют многократные представления в одном окне, каждом с его собственным выбором. Например, окна средства просмотра в Почте могут иметь целых три выбора: выбранные почтовые ящики, выбранные сообщения в том почтовом ящике и выделенный текст в сообщении. Только один из них должен сфокусироваться, и это определяет значение Общие советыБудьте осторожны при многократном использовании кодов.Если Вы используете тот же термин больше чем в одном месте в Вашем словаре, все они должны использовать тот же 4-байтовый код. Например, если Вы используете
Не локализуйте свои условияС одной стороны, основной синтаксис AppleScript ориентирован к английскому языку; наличие идентификаторов на другом языке было бы нечетно. Для другого это, вероятно, не работало бы: идентификаторы AppleScript не могут содержать символы неASCII, который сильно ограничивает то, что можно сказать на большинстве языков. Подсказки для Использования сценариев какаоКакао является средой разработки приложения Apple: это строго объектно-ориентировано, и упрощает добавлять scriptability. Для документации см. Приложения Scriptable. Однако значение по умолчанию Какао, пишущее сценарий поддержки, не следует инструкциям по интерфейсу сценариев во всех случаях. К счастью, существуют обходные решения: Для всехДобавьте 'aete' к своему приложению.Приложения какао в настоящее время определяют свой scriptability путем обеспечения ряда комплектов сценария. Каждый комплект сценария является парой plist файлов, определение комплекта (.scriptSuite) и терминология комплекта (.scriptTerminology). Какао может генерировать Поэтому необходимо создать параллель Не требуйте 'в' параметре для, 'делают'.Из-за ранней ошибки проекта Какао требует Для амбициозногоСделайте определенные определения вместо того, чтобы использовать универсальные.Какао, Пишущее сценарий определений комплекта, испытывает затруднения, будучи абсолютно точным. Определения, которые Вы наследовали от платформ – в частности Стандарт и текстовые Комплекты – почти абсолютно универсальны. Команды, которые не поддерживает Ваше приложение, являются все еще видимыми, прямыми параметрами, определяются как просто ссылка типа, и Обеспечьте хорошие сообщения об ошибках.Сообщения об ошибках Сценариев какао по умолчанию записаны в универсальном programmerese (таком как NSReceiverEvaluationScriptError: 4), а не определенный английский язык (тот, который не Может получить окно 17). С Mac OS X 10.3 (Пантера), можно установить собственные коды ошибки и сообщения путем вызова СсылкиИстория версии документа
|