Ссылка операторов

В этой главе описываются операторов AppleScript. Оператор является символом, словом или фразой, получающей значение на другое значение или пару значений. Работа является оценкой выражения, содержащего оператора. Операнд является выражением, на которое оператор получает значение.

AppleScript обеспечивает логические и математические операторы, а также операторов для включения, связи и получения ссылки на объект. Операторов, воздействующих на два значения, вызывают бинарными операторами, в то время как операторы, воздействующие на единственное значение, известны как унарные операторы.

Первая часть этой главы содержит две таблицы: Таблица 9-1 суммирует всех операторов, которых использует AppleScript, и Таблица 9-2 показывает порядок, в котором AppleScript оценивает операторов в выражениях. Остальная часть главы показывает, как AppleScript оценивает представительных операторов в выражениях сценария.

Таблица 9-1  операторы AppleScript

Оператор AppleScript

Описание

and

Логическая конъюнкция.

Двоичный логический оператор, комбинирующий два булевых значения. Результат true только если оба операнда оценивают к true.

Если, AppleScript проверяет левый операнд сначала и false, игнорирует правый операнд. (Это поведение вызывают, закорачивая.)

Класс операндов: boolean

Класс результата: boolean

or

Логическая дизъюнкция.

Двоичный логический оператор, комбинирующий два булевых значения. Результат true если любой операнд оценивает к true.

Если, AppleScript проверяет левый операнд сначала и true, игнорирует правый операнд. (Это поведение вызывают, закорачивая.)

Класс операндов: boolean

Класс результата: boolean

&

Связь.

Бинарный оператор, присоединяющийся к двум значениям. Если левый операнд является a text объект, результатом является a text объект (и только в этом случае делает попытку AppleScript принудить значение правого операнда, чтобы соответствовать тому из левых).

Если операнд налево является записью, результатом является запись. Если операнд налево принадлежит какому-либо другому классу, результатом является список.

Для получения дополнительной информации посмотрите & (concatenation).

Класс операндов: любой

Класс результата: list, record, text

=

is equal

equals

[is] equal to

Равенство.

Двоичный оператор сравнения, приводящий к true если оба операнда имеют то же значение. Операнды могут иметь любой класс.

Для получения дополнительной информации посмотрите equal, is not equal to.

Класс операндов: boolean

Класс результата: boolean

 (Знак «равно» опции на клавиатуре США)

is not

isn't

isn't equal [to]

is not equal [to]

doesn't equal

does not equal

Неравенство.

Двоичный оператор сравнения, приводящий к true если его два операнда имеют различные значения. Операнды могут иметь любой класс.

Для получения дополнительной информации посмотрите equal, is not equal to.

Класс операндов: boolean

Класс результата: boolean

>

[is] greater than

comes after

is not less than or equal [to]

isn't less than or equal [to]

Больше, чем.

Двоичный оператор сравнения, приводящий к true если значение левого операнда больше, чем значение правого операнда.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу левого операнда.

Для получения дополнительной информации посмотрите greater than, less than.

Класс операндов: date, integer, real, text

Класс результата: boolean

<

[is] less than

comes before

is not greater than or equal [to]

isn't greater than or equal [to]

Меньше, чем.

Двоичный оператор сравнения, приводящий к true если значение левого операнда является меньше, чем значение правого операнда.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево.

Для получения дополнительной информации посмотрите greater than, less than.

Класс операндов: date, integer, real, text

Класс результата: boolean

(Период опции на клавиатуре США)

>=

[is] greater than or equal [to]

is not less than

isn't less than

does not come before

doesn't come before

Больше, чем или равный.

Двоичный оператор сравнения, приводящий к true если значение левого операнда больше, чем или равно значению правого операнда.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево.

Метод использование AppleScript для определения, какое значение больше, зависит от класса операндов.

Класс операндов: date, integer, real, text

Класс результата: boolean

(Запятая опции на клавиатуре США)

<=

[is] less than or equal [to]

is not greater than

isn't greater than

does not come after

doesn't come after

Меньше чем или равный.

Двоичный оператор сравнения, приводящий к true если значение левого операнда меньше чем или равно значению правого операнда.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево.

Метод использование AppleScript для определения, какое значение больше, зависит от класса операндов.

Класс операндов: date, integer, real, text

Класс результата: boolean

start[s] with

begin[s] with

Запускается с.

Двоичный оператор включения, приводящий к true если список или text возразите против его соответствий права началу списка или text возразите против его левой стороны от него.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево.

Для получения дополнительной информации посмотрите starts with, ends with.

Класс операндов: list, text

Класс результата: boolean

end[s] with

Концы с.

Двоичный оператор включения, приводящий к true если список или text возразите против его соответствий права концу списка или text возразите против его левой стороны от него.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево.

Для получения дополнительной информации посмотрите starts with, ends with.

Класс операндов: list, text

Класс результата: boolean

contain[s]

Включение.

Двоичный оператор включения, приводящий к true если список, запись, или text возразите против ее соответствий права любой части списка, записи, или text возразите против его левой стороны от него.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево.

Для получения дополнительной информации посмотрите contains, is contained by.

Класс операндов: list, record, text

Класс результата: boolean

does not contain

doesn't contain

Невключение.

Двоичный оператор включения, приводящий к true если список, запись, или text объект с ее правой стороны от него не соответствует части списка, записи, или text возразите против его левой стороны от него.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу левого операнда.

Для получения дополнительной информации посмотрите contains, is contained by.

Класс операндов: list, record, text

Класс результата: boolean

is in

is contained by

Включение.

Двоичный оператор включения, приводящий к true если список, запись, или text возразите против ее левых соответствий любой части списка, записи, или text возразите против его правой стороны от него.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить левый операнд к классу правого операнда.

Для получения дополнительной информации посмотрите contains, is contained by.

Класс операндов: list, record, text

Класс результата: boolean

is not in

is not contained by

isn't contained by

Невключение.

Двоичный оператор включения, приводящий к true если список, запись, или text объект с ее левой стороны от него не соответствует части списка, записи, или text возразите против его правой стороны от него.

Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить левый операнд к классу правого операнда.

Для получения дополнительной информации посмотрите contains, is contained by.

Класс операндов: list, record, text

Класс результата: boolean

*

Умножение.

Оператор двоичной арифметики, умножающий число с его левой стороны от него и число с его правой стороны от него.

Класс операндов: integer, real

Класс результата: integer, real

+

Дополнение.

Оператор двоичной арифметики, добавляющий число или дату с ее левой стороны от него и число или дату с ее правой стороны от него. Только целые числа могут быть добавлены к датам. AppleScript интерпретирует такое целое число как много секунд.

Как унарный оператор, + не имеет никакого эффекта и удален на компиляции.

Класс операндов: date, integer, real

Класс результата: date, integer, real

Вычитание.

Двоичный или унарный арифметический оператор.

Бинарный оператор вычитает число с его правой стороны от него от числа или даты с его левой стороны от него.

Унарный оператор делает число с его правой стороны от него отрицательным.

Только целые числа могут быть вычтены из дат. AppleScript интерпретирует такое целое число как много секунд.

Класс операндов: date, integer, real

Класс результата: date, integer, real

/

÷ (Наклонная черта опции на клавиатуре США)

Подразделение.

Оператор двоичной арифметики, делящий число с его левой стороны от него числом с его правой стороны от него.

Класс операндов: integer, real

Класс результата: real

div

Интегральное подразделение.

Оператор двоичной арифметики, делящий число с его левой стороны от него числом с его правой стороны от него и возвращающий неотъемлемую часть ответа как его результат.

Класс операндов: integer, real

Класс результата: integer

mod

Остаток.

Оператор двоичной арифметики, делящий число с его левой стороны от него числом с его правой стороны от него и возвращающий остаток как его результат.

Класс операндов: integer, real

Класс результата: integer, real

^

Возведение в степень.

Оператор двоичной арифметики, увеличивающий число с его левой стороны от него к питанию числа с его правой стороны от него.

Класс операндов: integer, real

Класс результата: real

as

Приведение (или преобразование объекта).

Бинарный оператор, преобразовывающий левый операнд в класс, перечисленный с его правой стороны от него.

Не все значения могут быть принуждены ко всем классам. Приведения, которые может выполнить AppleScript, перечислены в Приведении (Преобразование объекта). Дополнительные приведения, если таковые имеются, что приложение может выполнить, перечислены в его словаре.

Класс операндов: правый операнд должен быть идентификатором класса; левый операнд должен быть значением, которое может быть преобразовано в тот класс.

Класс результата: класс указан идентификатором класса направо от оператора

not

Отрицание.

Унарный логический оператор, приводящий к true если операнд с его правой стороны от него false, и false если операнд true.

Класс операнда: boolean

Класс результата: boolean

[a] (ref [to] | reference to)

Ссылка на.

Унарный оператор, заставляющий AppleScript возвращать a reference объект, указывающий расположение операнда с его правой стороны от него. Ссылка оценена во время выполнения, не во время компиляции.

Посмотрите a reference to для получения дополнительной информации.

Класс операнда: любой тип класса

Класс результата: reference

При оценке выражений AppleScript использует приоритет оператора для определения, какие операции оценены сначала. В следующем выражении, например, AppleScript просто не выполняет операции слева направо — это выполняет работу умножения 2 * 5 во-первых, потому что умножение имеет более высокий приоритет, чем дополнение.

12 + 2 * 5 --result: 22

Таблица 9-2 показывает порядок, в котором AppleScript выполняет операции. Столбец маркировал «Ассоциативность», указывает порядок в случае, где существует два или больше операнда того же приоритета в выражении. Слово «None» в столбце Associativity указывает, что у Вас не может быть многократных последовательных случаев работы в выражении. Например, выражение 3 = 3 = 3 не законно, потому что ассоциативность для равного оператора не «ни один».

Для оценки выражений с многократными унарными операторами того же порядка AppleScript применяет оператора, самого близкого к операнду сначала, затем применяет следующего самого близкого оператора и т.д. Например, выражение not not not true оценен как not (not (not true)).

Можно осуществить порядок, в котором AppleScript выполняет операции путем группировки выражений в круглых скобках, оцененных сначала, начиная с самой внутренней пары круглых скобок.

Табличный 9-2  приоритет Оператора

Порядок

Операторы

Ассоциативность

Тип оператора

1

( )

Самый внутренний к наиболее удаленному

Группировка

2

+

Унарный

Плюс или знак «минус» для чисел

3

^

Справа налево

Возведение в степень

(обратите внимание на то, что это отличается от стандартной математики, в которой возведение в степень имеет приоритет по унарному плюс или минус),

4

*

/

div

mod

Слева направо

Умножение и разделение

5

+

Слева направо

Дополнение и вычитание

6

&

Слева направо

Связь

7

as

Слева направо

Приведение

8

<

>

Ни один

Сравнение

9

=

Ни один

Равенство и неравенство

10

not

Унарный

Логическое отрицание

11

and

Слева направо

Логичный и

12

or

Слева направо

Логичный или

Следующие разделы обеспечивают дополнительную подробность о том, как AppleScript оценивает операторов в выражениях:

И (связь)

Оператор связи (&) конкатенирует text объекты, соединения record объекты в запись и соединения другие объекты в список.

Таблица 9-1 суммирует использование использования этого оператора.

текст

Связь два text объекты присоединяются к символам от левой руки text возразите против символов от правой руки text объект, без прошедших пробелов. Например, "dump" & "truck" оценивает к text объект "dumptruck".

Если левый операнд является a text объект, но правый операнд не, AppleScript пытается принудить правый операнд к a text объект. Например, когда AppleScript оценивает выражение "Route " & 66 это принуждает целое число 66 к text объект "66", и результат text объект "Route 66".

Однако Вы получаете различный результат при инвертировании порядка операндов:

66 & "Route " --result: {66, "Route "} (a list)

В следующем примере левый операнд является a text возразите и правый операнд является списком, таким образом, результаты связи в a text объект:

item 1 of {"This"} & {"and", "that"} -- "Thisandthat"
запись

Связь двух записей соединяет свойства левой записи на свойства правой записи. Если обе записи содержат свойства с тем же именем, значение свойства от левой записи появляется в результате. Например, результат выражения

{ name:"Matt", mileage:"8000" } & { name:"Steve", framesize:58 }

{ name:"Matt", mileage:"8000", frameSize:58 }
Все другие классы

За исключением случаев, описанных выше для text объекты и record объекты, оператор связи (&) списки соединений. Операнд несписка считается списком, содержащим тот операнд. Следующий пример показывает связь двух целых чисел, списка и текстовой строки, и списка и записи, соответственно:

1 & 2 --result: {1, 2}
{"this"} & "hello" --result: {"this", "hello"}
{"this"} & {a:1, b:2} --result: {"this", 1, 2}

Если оба, операнды, которые будут связаны, являются списками, то результатом является список, содержащий все элементы в левом списке, сопровождаемом всеми элементами в правом списке. Например:

{"This"} & {"and", "that"} --result: {"This", "and", "that"}
{"This"} & item 1 of {"and", "that"} --result: {"This", "and"}

Чтобы присоединиться к двум спискам и создать список списков, а не единственного списка, можно включить каждый список в два набора скобок:

{{1, 2}} & {{3, 4}} --result: {{1, 2}, {3, 4}}

Для получения информации о работе эффективно с большими списками, посмотрите list.

ссылка на

a reference to оператор является унарным оператором, возвращающим a reference объект. Можно сократить этого оператора до a ref to, или ref to, или даже просто ref.

Для соответствующей информации посмотрите reference класс и Объектные Спецификаторы.

Примеры

Следующее утверждение создает a reference объект, содержащий объектный спецификатор к загрузочному диску Средства поиска:

tell app "Finder" to set diskRef to a ref to startup disk
--result: startup disk of application "Finder"

Следующее показывает, как получить ссылочный объект, относящийся к элементу в списке:

set itemRef to a reference to item 3 of {1, "hello", 755, 99}
    --result: item 3 of {1, "hello", 755, 99}
set newTotal to itemRef + 45 --result: 800

В заключительной строке AppleScript автоматически разрешает объектный спецификатор, содержавшийся в ссылке itemRef и получает его значение для использования в операции сложения. Заставить AppleScript явно разрешать a reference объект, можно использовать contents свойство:

contents of itemRef --result: 755

Следующие примеры демонстрируют, как использование ссылочного объекта может привести к различному результату, чем доступ к объекту непосредственно. Первый пример получает текущий отслеживаемый объект из iTunes, завоевывает репутацию, изменяет дорожку, затем завоевывает репутацию снова:

tell application "iTunes"
    set curTrack to current track
    --result: file track id 2703 of user playlist id 2425
    --        of source id 46 of application "iTunes"
    display dialog (name of curTrack as string)  -- "Shattered"
    next track -- play next song
    display dialog (name of curTrack as string) -- "Shattered"
end tell

Поскольку curTrack определенное track когда текущая дорожка изменяется, объект, его имя не изменяется. Но наблюдайте результат при использовании ссылки на текущую дорожку:

tell application "iTunes"
    set trackRef to a reference to current track
    --result: current track of application "iTunes"
    display dialog (name of trackRef as string) -- "Shattered"
    next track -- play next song
    display dialog (name of trackRef as string) -- "Strange Days"
end tell

Поскольку trackRef a reference когда текущая дорожка изменяется, объект, содержащий объектный спецификатор, спецификатор идентифицирует новую дорожку.

содержит, содержится

contains и is contained by операторы работают со списками, записями, и text объекты.

Таблица 9-1 суммирует использование этих операторов и их синонимов.

список

Список contains другой список, если правый список является подсписком левого списка. Подсписок является списком, элементы которого появляются в том же порядке и имеют те же значения как любая серия элементов в другом списке. Например, следующее утверждение true потому что 1 + 1 оценивает к 2, так, чтобы все элементы в правом списке появились, в том же порядке, в левом списке:

{ "this", "is", 1 + 1, "cool" } contains { "is", 2 }

Следующее утверждение false потому что элементы в правом списке не находятся в том же порядке как соответствующие элементы в левом списке:

{ "this", "is", 2, "cool" } contains { 2, "is" }

Список is contained by другой список, если левый список является подсписком правого списка. Например, следующее выражение true:

{ "is", 2} is contained by { "this", "is", 2, "cool" }

Оба contains и is contained by работайте, если подсписок является единственным значением — как с оператором связи (&), единственные значения принуждены к спискам с одним элементом. Например, оба из следующих выражений оценивают к true:

{ "this", "is", 2, "cool" } contains 2
2 is contained by { "this", "is", 2, "cool" }

Однако следующие выражения, содержа вложенные списки, оба оценивают ко лжи:

{"this", "is", {2}, "cool"} contains 2 -- false
{"this", "is", {2}, "cool"} contains {2} -- false
запись

Запись содержит другую запись, если все свойства в правой записи включены в левую запись, и значения свойств в правой записи равны значениям соответствующих свойств в левой записи. Запись содержится другой записью, если все свойства в левой записи включены в правую запись, и значения свойств в левой записи равны значениям соответствующих свойств в правой записи. Порядок, в котором появляются свойства, не имеет значения. Например, следующее true:

{ name:"Matt", mileage:"8000", description:"fast"} ¬
    contains { description:"fast", name:"Matt" }
текст

A text объект содержит другого text возразите если символы в правой руке text объект равен любой непрерывной серии символов в левой руке text объект. Например,

"operand" contains "era"

true, но

"operand" contains "dna"

false.

A text объект содержится другим text возразите если символы в левой руке text объект равен любой серии символов в правой руке text объект. Например, этот оператор true:

"era" is contained by "operand"

Текстовые сравнения могут быть затронуты considering и ignoring операторы, как описано в текстовом разделе equal, is not equal to.

равняйтесь, не равно

equal и is not equal to операторы могут обработать операнды любого класса. Два выражения различных классов обычно не равны, несмотря на то, что для скалярных операндов, таких как булевские переменные, целые числа и реалы, два операнда являются тем же, если у них есть то же значение.

Таблица 9-1 суммирует использование этих операторов и их синонимов.

список

Два списка равны, если они оба содержат то же число элементов и если значение элемента в одном списке идентично значению элемента в соответствующей позиции в другом списке:

{ 7, 23, "Hello" } = {7, 23, "Goodbye"} --result: false
запись

Две записи равны, если они оба содержат тот же набор свойств и если значения свойств с той же меткой равны. Они не равны, если записи содержат различные наборы свойств, или если значения свойств с той же меткой не равны. Порядок, в котором перечислены свойства, не влияет на равенство. Например, следующее выражение true:

{ name:"Matt", mileage:"8000" } = { mileage:"8000", name:"Matt"}
текст

Два text объекты равны, если они - оба та же серия символов. Они не равны, если они - различная серия символов. Для соответствующей информации посмотрите text класс.

Текстовые сравнения могут быть затронуты considering и ignoring операторы, дающие AppleScript команду выборочно рассматривать или игнорировать атрибуты символов или типы символов. Например, если Вы не используете ignoring оператор, AppleScript выдерживает сравнение text объекты путем рассмотрения всех символов и пунктуации.

AppleScript не отличает верхний регистр от строчных букв, если Вы не используете a considering оператор для рассмотрения case атрибут. Например:

"DUMPtruck" is equal to "dumptruck" --result: true
considering case
    "DUMPtruck" is equal to "dumptruck" --result: false
end considering

При сравнении два text объекты, если тест не включается в a considering или ignoring оператор, тогда сравнение использует значения по умолчанию для рассмотрения и игнорирования атрибутов (описанный в considering / ignoring (text comparison)).

больше, чем, меньше, чем

greater than и less than операторы работают с датами, целыми числами, вещественными числами, и text объекты.

Таблица 9-1 суммирует использование этих операторов и их синонимов.

дата

Дата больше, чем другая дата, если это представляет более позднее время. Дата является меньше, чем другая дата, если это представляет более раннее время.

целое число, реальное

Целое число или вещественное число больше, чем другое целое или вещественное число, если это представляет большее число. Это - меньше, чем другое целое или вещественное число, если это представляет меньшее число.

текст

Определить упорядочивание два text объекты, AppleScript использует набор порядка сопоставления в области Language Международных предпочтений. A text объект больше, чем (прибывает после), другой text основанный на объектах на лексикографическом упорядочивании предпочтения языка пользователя. С предпочтительным набором английскому языку следующие два оператора оба оценивают к true:

"zebra" comes after "aardvark"
"zebra" > "aardvark"

Следующие два оператора также оценивают к true:

"aardvark" comes before "zebra"
"aardvark" < "zebra"

Текстовые сравнения могут быть затронуты considering и ignoring операторы, как описано в текстовом разделе equal, is not equal to.

запускается с, концы с

starts with и ends with операторы работают со списками и text объекты.

Таблица 9-1 суммирует использование этих операторов и их синонимов.

список

Список starts with элементы во втором списке, если все элементы во втором списке найдены в начале первого списка. Список ends with элементы во втором списке, если все элементы во втором списке найдены в конце первого списка. Например, следующие три выражения - все true:

{ "this", "is", 2, "cool" } ends with "cool"
{ "this", "is", 2, "cool" } starts with "this"
{ "this", "is", 2, "cool" } starts with { "this", "is" }
текст

A text объект starts with текст за секунду text возразите, найдены ли все символы во втором объекте в начале первого объекта. A text объект ends with текст за секунду text возразите, найдены ли все символы во втором объекте в конце первого объекта. Например, следующее выражение true:

"operand" starts with "opera"

A text возразите концам с другим text возразите если символы в правой руке text объект совпадает с символами в конце левой руки text объект. Например, следующее выражение true:

"operand" ends with "and"

Текстовые сравнения могут быть затронуты considering и ignoring операторы, как описано в текстовом разделе equal, is not equal to.