Руководство по actionscript. часть 1, стр. 057

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

Условные операторы

Условный оператор — это такой тип оператора, который исполняется только при выполнении определенного условия. Условные операторы позволяют программе выбирать один из нескольких возможных путей дальнейшего исполнения в зависимости от ее текущего состояния.

В языке ActionScript существует два различных условных оператора: оператор if и оператор switch. Кроме того, в языке ActionScript есть и простой условный оператор? :, который кратко рассматривается в гл. 10. Подробную информацию об операторе? : можно найти в справочнике по языку ActionScript корпорации Adobe.

Оператор if

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

if (условноеВыражение) {

блокКода1 } else {

блокКода2

Когда при выполнении программы на языке ActionScript встречается оператор i f, среда выполнения Flash выполняет либо инструкции блокКода1, либо инструкции блокКода2 в зависимости от значения выражения условноеВыражение. Если результатом выражения условноеВыражение является значение true типа Boolean, то выполняется первый блок кода. Если результатом выражения условноеВыражение является значение false типа Boolean, то — второй блок кода. Если результатом выражения условноеВыражение является значение другого типа, отличного от Boolean, то среда выполнения Flash автоматически преобразует результат выражения услов — ноеВыражение в объект типа Boolean и использует результат преобразования при выборе блока кода для исполнения.

Руководство по actionscript. часть 1, стр. 058

Шу_ Правила преобразования значений различных типов в объект типа Boolean описаны в табл. 8.5.

Например, в следующем операторе i f результатом указанного условного выражения является значение true типа Boolean, поэтому переменной greeting присваивается значение Hello, а не Bon j our.

var greeting;

// Результатом условного выражения является значение true, поэтому… if (true) {

// …выполняется этот код

greeting = «Hello»; } else {

// Этот код не выполняется

greeting = «Bonjour»;

}

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

Например, предположим, что мы создаем общедоступный сайт, один из разделов которого посвящен азартным играм. Играть в них могут пользователи, возраст которых не менее 18 лет. Во время регистрации на сайте статус каждого пользователя загружается из базы данных. Загруженный статус присваивается переменной gamblingAuthorized. Если значением этой переменной является true, то возраст пользователя составляет 18 лет или более; значение false означает, что пользователю менее 18 лет.

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

if (gamblingAuthorized) {

// Расположенный здесь код отображает интерфейс раздела с азартными играми } else {

// Представленный здесь код отображает сообщение // «Доступ запрещен»

}

Зачастую условным выражением оператора if является либо выражение равенства, либо выражение отношения. Для сравнения двух значений и представления результата этого сравнения в виде значения типа Boolean (то есть либо true, либо false) в выражениях равенства и выражениях отношения используются операторы равенства и операторы отношения. Например, в следующем выражении равенства используется оператор равенства (==) для сравнения выражения Mike с выражением Margaret:

Руководство по actionscript. часть 1, стр. 059

«Mike» == «Margaret»

Результатом предыдущего выражения является значение false типа Boolean, поскольку выражение Mike не равно выражению Margaret.

Подобным образом для сравнения значения б со значением 7 в следующем выражении отношения применяется оператор «меньше чем» (<):

6 < 7

Результатом этого выражения является значение true типа Boolean, поскольку 6 меньше 7.

Как видно из предыдущих примеров, экземпляры класса String сравниваются по отдельным символам, а при сравнении экземпляров классов Number, int и uint сравниваются математические величины, хранящиеся в этих экземплярах. Обратите внимание, что при сравнении строк учитывается регистр, например выражение а не равно выражению А. Правила, используемые при сравнении значений (в каких случаях два значения равны между собой или одно значение больше или меньше другого), можно найти в описании операторов ==, ===, < и > в справочнике по языку ActionScript корпорации Adobe.

Теперь рассмотрим пример оператора if, в качестве условного выражения которого используется знак равенства. Предположим, что мы создаем программу для интернет-магазина с виртуальной корзиной для покупок. В программе создана переменная экземпляра numlterns, отражающая текущее количество товаров в корзине пользователя. Если корзина пуста, то программа выдает сообщение Ваша корзина пуста. В ином случае программа выдает сообщение Количество товаров в вашей корзине: п (где п обозначает количество товаров в корзине).

В следующем примере кода показано, как в программе может быть создано сообщение о текущем статусе корзины пользователя. Присваиваемое значение переменной basketStatus зависит от значения переменной numl terns.

var basketStatus;

if (numlterns == 0) {

basketStatus = «Ваша корзина пуста»; } else {

basketStatus = «Количество товаров в вашей корзине: » + numltems;

Если значение переменной numl terns в предыдущем примере кода равно нулю, то программа присваивает переменной basketStatus следующее выражение:

«Ваша корзина пуста»

В противном случае программа присваивает переменной basketStatus следующее выражение:

«Количество товаров в вашей корзине: » + numltems

Обратите внимание на использование оператора конкатенации (+) в предыдущем выражении. Он преобразует числовое значение, хранящееся в переменной numltems, в строку и объединяет ее со строкой «Количество товаров в вашей корзине: «. Результирующим значением станет объединение двух выражений. Например, если значение переменной numl terns равно 2, то результатом операции конкатенации будет следующая строка:

Руководство по actionscript. часть 1, стр. 060

«Количество товаров в вашей корзине: 2″

Оператор И без условия else

Когда в условии else оператора i f нет необходимости, то его можно просто опустить. Предположим, что в нашем приложении для интернет-магазина необходимо реализовать следующую возможность: пользователь, заказавший более десяти товаров, получает скидку 10 %. При подсчете общей стоимости покупки в процессе оформления заказа мы можем использовать код, аналогичный следующему:

if (numltems > 10) { totalPrice = total Price * .9;

}

Если значение переменной numltems будет меньше И, то значение переменной totalPrice останется неизмененным.

Цепочка операторов if

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

if (условиоеВыражение1) {

блокКода1 } else if (условноеВыражение2) {

блокКода2 } else {

блокКодаЗ

}

Предположим, что нужно разработать многоязычное приложение, которое выводит приветствие для своих пользователей на одном из четырех языков: английском, японском, французском или немецком. При запуске программы мы просим пользователя выбрать язык и присваиваем соответствующей переменной language одно из следующих строковых значений: «english», » japanese», «french» или «german» (обратите внимание, что названия языков начинаются со строчных букв; обычно при сравнении строк все буквы записываются либо в нижнем, либо

в ВЕРХНЕМ регистре). Чтобы создать приветствие на выбранном языке, используем следующий код:

var greeting;

if (language == «english») {

greeting = «Hello»; } else if (language == «japanese») {

greeting = «Konn’ichiwa»; } else if (language == «french») {

greeting = «Bonjour»; } else if (language == «german») {

greeting = «Guten tag»; } else {

// Расположенный здесь код может быть использован // для отображения сообщения об ошибке, // вызванной неправильно выбранным языком

}

Если при выполнении предыдущего кода значением переменной language является «english», то переменной greeting присваивается значение «Hello». Если значением переменной language является «japanese», «french» или «german», то переменной greeting присваивается значение «Konnichiwa», «Bonjour» или «Guten tag» соответственно. Если переменная language не имеет ни одного из перечисленных значений (возможно, из-за возникшей ошибки впрограмме) — «english», «japanese», «french» или «german», —товыполняется код, относящийся к последнему оператору else.

Руководство по actionscript. часть 1, стр. 061

Теперь, когда мы познакомились с оператором if, рассмотрим оператор switch, предлагаемый языком ActionScript в качестве удобного способа создания условия с несколькими возможными результатами.

I Поведение оператора switch можно реализовать и с помощью операторов if, однако, j, когда речь идет об условиях с несколькими, возможными результатами, оператор switch fly считается более понятным, чем if.

Оператор switch

Оператор switch позволяет выполнять один из нескольких возможных блоков кода в зависимости от результата одного условного выражения. Оператор switch можно представить в следующем обобщенном виде:

switch (условноеВыражение) { case выражение1:

блокКода1

break; case выражение2\ ¦ блокКода2

break; default:

блокКодаЗ

В предыдущем коде условноеВыражение — это выражение, которое среда выполнения Flash попытается последовательно сопоставить со всеми указанными выражениями case сверху вниз. Выражения case записываются с помощью оператора-метки case и завершаются двоеточием. Если результат выражения условноеВыражение совпадает со значением выражения case, то выполняются все инструкции, расположенные за данной меткой case, включая инструкции во всех последующих блоках этого оператора! Чтобы предотвратить выполнение последующих блоков, необходимо использовать оператор break в конце каждого блока. Если же мы хотим, чтобы несколько условий инициировали выполнение одного и того же блока кода, то оператор break можно опустить. Например, в следующем примере кода блокКода1 выполняется в тех случаях, когда результат выражения условноеВыражение совпадает со значением либо выражения выражение!, либо выражения выражение2:

switch (условноеВыражение) { case выражение!: case выражение2:

блокКода!

break; case выражениеЗ:

блокКода2

break; default:

блокКодаЗ

}

Если результат выражения условноеВыражение не совпадает ни с одним из значений выражений case, то выполняются все инструкции, расположенные за меткой default.

Метка default обычно указывается после всех выражений case, однако с технической точки зрения ее можно поместить в любом месте оператора switch. Более того, эта метка не является обязательным атрибутом рассматриваемого оператора. Если default не указана и результат выражения условноеВыражение не совпадает ни с одним из значений выражений case, то выполнение программы продолжается с инструкции, расположенной сразу за оператором switch (то есть код, размещенный внутри оператора switch, просто не выполняется).

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

Руководство по actionscript. часть 1, стр. 062

Var greeting;

switch (language) { case «english»: greeting = «Hello»; break;

}

case «Japanese»:

greeting = «Konnichiwa»;

break: case «french»:

greeting = «Bonjour»:

break;

case «german»: greeting = «Guten tag»; break;

default:

// Расположенный здесь код может быть использован для отображения // сообщения об ошибке, вызванной неправильно выбранным языком

$4

В операторе switch при сравнении результата выражения условноеВыражение со значениями выражений case неявно используется оператор строгого равенства (===), а не 3# оператор равенства (==). Описание различий между этими операторами можно найти в справочнике по языку ActionScript корпорации Adobe.

Циклы

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

В языке ActionScript существует пять различных типов циклов: while, do-while, for, for-in и f or-each-in. Первые три типа обладают схожей функциональностью, однако их синтаксис отличается. Оставшиеся два типа используются для доступа к динамическим переменным экземпляра объекта. Мы еще не рассматривали динамические переменные экземпляра, поэтому пока остановимся на первых трех типах циклов. Информацию по циклам f or-in и f or-each-in можно найти в гл. 15.

Оператор while

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

while (условноеВыражение) { блокКода

}

Если результатом выражения условноеВыражение является true, то выполняются инструкции из блока блокКода (называемого телом цикла). Однако, в отличие от оператора i f, когда выполнение блока блокКода завершается, управление снова передается на начало оператора while (то есть среда выполнения Flash «возвращается» к его началу). Второе выполнение оператора while ничем не отличается от первого: вычисляется

результат выражения условноеВыражение и, если его значением является true, снова выполняется блок блокКода. Этот процесс будет продолжаться до тех пор, пока результатом выражения условноеВыражение не станет false, после чего выполнение программы будет продолжено с инструкции, расположенной сразу за оператором while.

Руководство по actionscript. часть 1, стр. 063

Если выражение условноеВыражение никогда не возвращает значение false, то цикл будет выполняться бесконечно и среда выполнения Flash будет вынуждена сгенерировать ошибку, которая остановит цикл (а вместе с ним и весь исполняемый в данный момент код). Чтобы избежать подобной ситуации, в блок блокКода цикла while обычно включается инструкция, которая модифицирует выражение условноеВыражение, заставляя его вернуть значение false при выполнении определенного условия.

Например, рассмотрим следующий цикл, определяющий результат возведения числа 2 в третью степень (то есть 2 умножается на 2 и умножается на 2), — тело цикла выполняется два раза:

var total = 2; var counter = 0;

while (counter < 2) { total = total * 2; counter = counter + 1;

}

При выполнении предыдущего цикла while среда выполнения Flash сначала вычисляет результат условного выражения:

counter < 2

Поскольку значение переменной counter равно 0 и, соответственно, меньше 2, значением условного выражения является true; таким образом, Flash выполняет тело цикла:

total = total * 2; counter = counter + 1;

В теле цикла переменной total присваивается ее текущее значение, умноженное на 2, а к значению переменной counter прибавляется 1. С этого момента значением переменной total является 4, а переменной counter — 1. После выполнения тела цикла наступает время повторить его.

При выполнении цикла во второй раз среда Flash снова проверяет значение условного выражения. На этот раз значением переменной counter является 1, что по-прежнему меньше 2, поэтому значением условного выражения является true. Следовательно, Flash выполняет тело цикла во второй раз. Как и в предыдущий раз, переменной total присваивается ее текущее значение, умноженное на 2, а к значению переменной counter прибавляется 1. С этого момента значением переменной total является 8, а переменной counter — 2. После выполнения тела цикла снова наступает время повторить его.

При выполнении цикла в третий раз среда Flash снова проверяет значение условного выражения. На этот раз значением переменной counter является 2, что уже не меньше 2, поэтому значением условного выражения является false и выполнение цикла прекращается. В процессе вычислений значение переменной total, которое

Руководство по actionscript. часть 1, стр. 064

Изначально равнялось 2, было дважды умножено на само себя, поэтому результатом является 8.

I В реальном коде для выполнения экспоненциальных вычислений следует использовать м& 4 „ функцию Math. pow(), а не оператор цикла. Например, для возведения 2 в третью степень №{‘ используется конструкция Math. pow(2, 3).

Хотя предыдущий цикл не вызывает особого восторга, он обладает потрясающей гибкостью. Например, если бы мы хотели возвести, скажем, число 2 в степень 16, мы могли бы просто обновить значение в условном выражении, чтобы тело цикла выполнялось 15 раз, как показано в следующем примере:

var total = 2; var counter = 0; while (counter < 15) {

total = total * 2;

counter = counter + 1;

}

// Здесь значение переменной total равно 65 536

Одно выполнение тела цикла называется итерацией. Соответственно, переменная, которая контролирует выполненное количество итераций данного цикла — в нашем случае это counter, — называется итератором или, реже, индексом цикла. Традиционно, для именования итераторов циклов используется буква i, как показано в следующем примере кода:

var total = 2; var i = 0; while (i < 15) {

total = total * 2;

i = i + 1;

}

Последняя строка в теле цикла из предыдущего примера называется корректором цикла, поскольку она до известной степени корректирует значение итератора, что в конечном счете приводит к завершению цикла. В данном случае корректор цикла прибавляет 1 к значению итератора. Эта операция является настолько распространенной, что для нее был создан собственный оператор: оператор инкремента, записываемый как ++. Оператор инкремента прибавляет 1 к значению своего операнда. Например, в следующем примере к значению переменной п прибавляется 1:

var п = 0;

п++; // значение переменной п теперь равно 1

В следующем примере кода наш цикл реализован уже с использованием оператора инкремента:

var total = 2; var i = 0; while (i < 15) {

total = total * 2;

i++;

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

var п = 4;

п—; // значение переменной п теперь равно 3

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

Руководство по actionscript. часть 1, стр. 065

Обработка списков с помощью циклов

Циклы обычно используются для обработки списков элементов.

Предположим, что мы создаем регистрационную форму, в которой пользователь должен указать адрес электронной почты. Перед отправкой формы на сервер мы хотим проверить, содержит ли указанный адрес электронной почты символ @. Если этого символа нет, мы предупредим пользователя, что введенный адрес электронной почты является неверным.

Обратите внимание, что в этом примере наша концепция «правильного» адреса является крайне упрощенной. Например, в нашем коде адреса, начинающиеся или заканчивающиеся символом @ либо содержащие несколько символов @, считаются корректными. Тем не менее пример демонстрирует первый скромный шаг в создании алгоритма проверки адресов электронной почты.

Чтобы проверить наличие символа @ в адресе электронной почты, мы используем цикл, трактующий адрес как список из отдельных символов. Перед выполнением цикла мы создадим переменную isValidAddress и присвоим ей значение false. Тело цикла будет выполняться один раз для каждого символа в адресе электронной почты. При выполнении тела цикла в первый раз проверяется, является ли первый символ адреса электронной почты символом @. Если является, то в теле цикла переменной is Val idAddres s присваивается значение true, что указывает на корректность адреса электронной почты. При выполнении тела цикла во второй раз проверяется, является ли второй символ адреса электронной почты символом @. И снова, если этот символ найден, в теле цикла переменной is Val idAddres s присваивается значение true, что указывает на корректность адреса электронной почты.

Руководство по actionscript. часть 1, стр. 066

Тело цикла продолжает проверять каждый символ в адресе электронной почты до тех пор, пока не останется ни одного символа. Если после выполнения цикла значение переменной isValidAddress по-прежнему равно false, значит, символ @ не был найден и, следовательно, адрес электронной почты считается некорректным. С другой стороны, если значение переменной isValidAddress равно true, значит, символ @ был найден и, следовательно, адрес электронной почты считается корректным.

Теперь взглянем на реальный код проверки. В настоящем приложении мы бы начали работу с получения адреса электронной почты, указанного пользователем.

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

var address = «me@inoock. org»:

Цосле этого мы создадим переменную isValidAddress и присвоим ей значение

false:

var. isValidAddress = false: Затем создадим итератор цикла:

var i = 0:

Далее определим оператор while для нашего цикла. Мы хотим, чтобы тело цикла выполнялось один раз для каждого символа строки, хранящейся в переменной addres s. Для получения количества символов в строке используется переменная экземпляра length класса String. Например, значением выражения «abc» . length является 3. Это значит, что строка abc состоит из трех символов. Таким образом, общая структура нашего цикла выглядит следующим образом:

while (i < address.length) { i++:

}

Всякий раз при выполнении тела цикла мы должны получить один из символов строки, хранящейся в переменной address, и сравнить его со строкой «@». Если полученный символ совпадает с ней, то присвоим переменной isValidAddress значение true. Чтобы получить определенный символ строки, воспользуемся методом экземпляра charAt ( ) собственного класса String. Название метода является сокращением фразы character at («символ в позиции»). Методу charAt ( ) необходимо передать один аргумент — число, указывающее позицию, или индекс, получаемого символа. Нумерация символов начинается с нуля. Например, результатом следующего выражения вызова является значение «т», поскольку именно этот символ находится в позиции 0:



Полезные ссылки
Случайные записи
  • 09.10.2010">Разница между растровым и векторным изображением
  • 24.02.2011">Руководство по actionscript. часть 6, стр. 114
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.79
  • 08.09.2011">Есть ли предел у интернета?
  • 25.10.2011">Прозрачные батарейки – скорое будущее
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.43
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.100
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 049
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 120
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.53
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.9
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.130
  • 01.10.2010">Создание и редактирование экшенов в Photoshop
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 102
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 081
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...