08.12.11
Apple Script — расширяя горизонты. Часть 5
Условные операторы. Продолжение
На прошлом уроке мы уже познакомились с условными операторами. Однако, рассмотренные нами конструкции отличались простотой, ведь мы изначально знали, что и чему будет равно. Но на деле так бывает далеко не всегда. Именно для таких случаев и введены дополнительные условия.
Простой пример: по сценарию пользователь должен ввести число 5 и никакое другое:
set abc to display dialog "Введите число 5" default answer "" buttons {"Результат"}
set chislo to text returned of abc
set chislo to chislo as number
if chislo = 5 then
display dialog "Правильное число" buttons {"OK"}
else
display dialog "Неверное число" buttons {"OK"}
end if
Можно поступить иначе и попросить пользователя ввести любое число больше 5. Для этого существуют дополнительные операторы сравнения чисел:
= равно (is)
/= не равно (is not equal)
> больше чем (is greater than)
< меньше чем (is less than)
>= больше или равно (is greater than or equal to)
<= меньше или равно (is less than or equal to)
Обратите внимание на надписи в скобках. Их можно использовать вместо значков, указанных справа. Сделано это специально для того, чтобы максимально приблизить Apple Script к английскому языку.
Таким образом, немного модифицировав приведенный выше сценарий, вы можете предложить пользователю ввести любое число больше чем 5. Причем, сценарий отличит, если ввести именно 5:
set abc to display dialog "Введите число больше или равное 5" default answer "" buttons {"Результат"}
set chislo to text returned of abc
set chislo to chislo as number
if chislo = 5 then
display dialog "Введено число 5" buttons {"OK"}
else if chislo ≥ 5 then
display dialog "Введено число больше 5" buttons {"OK"}
else
display dialog "Введено неверное число" buttons {"OK"}
end if
Сделаем задачу несколько иной. Пусть сценарий определяет, ввели ли вы четное или нечетное число. Для этого воспользуемся оператором деления на целое div:
set abc to display dialog "Введите число" default answer "" buttons {"Результат"}
set chislo to text returned of abc
set chislo to chislo as number
set mod1 to chislo / 2
set mod2 to chislo div 2
if mod1 is mod2 then
display dialog "Число четное" buttons {"OK"}
else
display dialog "Число нечетное" buttons {"OK"}
end if

Принцип определения очень прост. Дело в том, что четное число в любом случае делится на два без остатка. В случае же с нечетным, остатка не избежать. Именно по этому признаку и будут различаться (или, наоборот, совпадать) результаты деления.
Сравнивать можно не только числа, но и строки. Для этого существуют следующие операторы сравнения:
begins with - начинается с
does not start with - не начинается с
ends with - оканчивается на
is equal to - равно
comes before - идет впереди
comes after - идет позади
is in - находится внутри
is not in - не находится внутри
contains - содержит
does not contain - не содержит
Вот в качестве примера сценарий, который предлагает ввести пользователю написать по-английски слово «лев». Обратите внимание, что введенное значение задается уже не как число (number), но как текст (text).
set abc to display dialog "Как будет по-английски \"лев\"?" default answer "" buttons {"Проверить"}
set slovo to text returned of abc
set slovo to slovo as text
if slovo = "lion" then
display dialog "Правильно!" buttons {"OK"}
else
display dialog "Неверно!" buttons {"OK"}
end if
Или вот пример, когда сценарий проверяет, содержит ли введенное слово букву «с»:
set abc to display dialog "Введите слово с буквой \"С\"" default answer "" buttons {"Проверить"}
set slovo to text returned of abc
set slovo2 to "c"
set slovo to slovo as text
if slovo contains slovo then
display dialog "Правильно!" buttons {"OK"}
else
display dialog "Неверно!" buttons {"OK"}
end if
Учтите, что в данном случае не учитывается регистр, сценарию все равно, ввел ли пользователь строчную или прописную «С». Для того, чтобы учесть регистр потребуется:
set abc to display dialog "Введите слово с буквой \"С\"" default answer "" buttons {"Проверить"}
set slovo to text returned of abc
set slovo2 to "c"
set slovo to slovo as text
considering case
if slovo contains slovo2 then
display dialog "Правильно!" buttons {"OK"}
else
display dialog "Неверно!" buttons {"OK"}
end if
end considering

Помимо considering если еще и:
ignoring with space
...
end ignoring
данная конструкция потребуется в том случае, если вы желаете, чтобы сценарий не учитывал пробелы.
Операторы сравнения существуют также и для списков (list):
begins with - начинается с
end with - заканчивается на
is equal to - равно
contains - содержит
и записей (record):
is equal to - равно
contains - содержит
set my_records to {Mac:"MacBook", CPU:"Intel", OS:"MacOS X"}
if my_records contains {Mac:"MacBook"} then
display dialog "Правильно!" buttons {"OK"}
end if
Примечание: списки и записи мы проходили в третьем и четвертом уроках, соответственно.
При необходимости можно сделать так, чтобы учитывалось сразу несколько сравнений, то есть соблюдалось несколько условий. Для этого существуют так называемые булевые операторы (операторы булевой логики) — and и or («и» и «или»):
set a to 5
set b to 5
if a = 5 and b = 5 then
beep
end if
или:
set a to 5
set b to 9
if a = 5 or b = 5 then
beep
end if
В первом случае необходимо выполнение обоих условий, во втором достаточно выполнение лишь одного условия. Существует еще и булевый оператор not, но о нём мы поговорим позднее.
вернуться назад..