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

 

 

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

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

должен указать адрес электронной почты. Перед отправкой формы на сервер мы 

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

этого символа нет, мы предупредим пользователя, что введенный адрес  

электронной почты является неверным. 

Чтобы проверить наличие символа @ в адресе электронной почты, мы используем 
цикл, трактующий адрес как список из отдельных символов. Перед выполнением 
цикла мы создадим переменную isValidAddress и присвоим ей значение false. 
Тело цикла будет выполняться один раз для каждого символа в адресе электронной 
почты. При выполнении тела цикла в первый раз проверяется, является ли первый 
символ адреса электронной почты символом @. Если является, то в теле цикла  
переменной isVal idAddres s присваивается значение true, что указывает на  
корректность адреса электронной почты. При выполнении тела цикла во второй раз  
проверяется, является ли второй символ адреса электронной почты символом @. И снова, 
если этот символ найден, в теле цикла переменной i s Val idAddr es s присваивается 
значение true, что указывает на корректность адреса электронной почты. 
Тело цикла продолжает проверять каждый символ в адресе электронной почты до 
тех пор, пока не останется ни одного символа. Если после выполнения цикла  
значение переменной isValidAddress по-прежнему равно false, значит, символ @ 
не был найден и, следовательно, адрес электронной почты считается некорректным. 
С другой стороны, если значение переменной isValidAddress равно true,  
значит, символ @ был найден и, следовательно, адрес электронной почты считается 
корректным. 
Теперь взглянем на реальный код проверки. В настоящем приложении мы бы 
начали работу с получения адреса электронной почты, указанного пользователем. 
Тем не менее, чтобы упростить этот пример, мы укажем адрес электронной почты 
вручную, как показано ниже: 
var address = "me@moock.org"; 
Цосле этого мы создадим переменную isValidAddress и присвоим ей значение 
false: 
var. isValidAddress = false; 
Затем создадим итератор цикла: 
var i = 0; 
Далее определим оператор while для нашего цикла. Мы хотим, чтобы тело цикла 
выполнялось один раз для каждого символа строки, хранящейся в переменной 
address. Для получения количества символов в строке используется переменная 
экземпляра length класса String. Например, значением выражения "abc" . 
length является 3. Это значит, что строка abc состоит из трех символов. Таким 
образом, общая структура нашего цикла выглядит следующим образом: 
while (i < address.length) { 
i++; 
Всякий раз при выполнении тела цикла мы должны получить один из символов 
строки, хранящейся в переменной address, и сравнить его со строкой "@". Если 
полученный символ совпадает с ней, то присвоим переменной isValidAddress 
значение true. Чтобы получить определенный символ строки, воспользуемся  
методом экземпляра charAt ( ) собственного класса String. Название метода  
является сокращением фразы character at («символ в позиции»). Методу charAt ( ) 
необходимо передать один аргумент — число, указывающее позицию, или индекс, 
получаемого символа. Нумерация символов начинается с нуля. Например,  
результатом следующего выражения вызова является значение "т", поскольку именно 
этот символ находится в позиции 0: 
address.charAt(O); 
Подобным образом результатом следующего выражения вызова является значение 
" @ ", поскольку в позиции 2 находится символ @: 
address.charAtB); 
В теле цикла индекс получаемого символа задается динамически через итератор 
i, как показано в следующем примере кода: 
while (i < address.length) { 
if (address.charAt(i) == "@") { 
isValidAddress = true; 
i++; 
Код проверки адреса электронной почты целиком: 
var address = "me@moock.org"; 
var isValidAddress = false; 
var i = 0; 
while (i < address.length) { 
if (address.charAt(i) == "@") { 
isValidAddress = true; 
i++; 
В качестве упражнения рассмотрим, как среда выполнения Flash будет выполнять 
предыдущий оператор while. 
Сначала среда Flash вычисляет значение условного выражения: 
i < address.length 
Здесь значение переменной i равно 0, а значение выражения address . length 
равно 12. Число 0 меньше 12, поэтому результатом условного выражения является 
true, среда выполнения Flash выполняет тело цикла: 
if (address.charAt(i) == "@") { 
isValidAddress = true: 
i++: 
В теле цикла среда Flash сначала должна определить, нужно ли выполнять код 
в условном операторе: 
if (address.charAt(i) == "@") { 
isValidAddress = true; 
Чтобы определить, нужно ли выполнять код в предыдущем условном операторе, 
Flash проверяет, совпадает ли результат выражения вызова address . charAt (i) 
со строкой "@". При выполнении тела цикла в первый раз значение  
переменной i равно 0, поэтому выражение вызова address . charAt (i) преобразуется 
в выражение address . charAt @), которое, как мы видели раньше, возвращает 
символ "т" (первый символ в адресе электронной почты). Символ "т" не равен 
символу " @ ", поэтому среда Flash не выполняет код в условном операторе. 
После этого Flash выполняет корректор цикла, увеличивая значение переменной 
i на 1: 
i++; 
После выполнения тела цикла наступает время повторить его. 
При выполнении цикла во второй раз среда Flash снова проверяет значение  
условного выражения. На этот раз значение переменной i равно 1, а значение выражения 
address . length по-прежнему равно 12. Число 1 меньше 12, поэтому  
результатом условного выражения является значение true и Flash выполняет тело цикла 
во второй раз. Как и раньше, в теле цикла определяется, нужно ли выполнять код 
в условном операторе: 
if (address.charAt(i) == "@") { 
isValidAddress = true; 
Значение переменной i равно 1, поэтому выражение вызова address . charAt (i) 
преобразуется в выражение address. charAt A), которое возвращает символ "е" 
(второй символ в адресе электронной почты). Символ "е" вновь не равен  
символу " @ ", поэтому среда Flash не выполняет код в условном операторе. 
После этого Flash выполняет корректор цикла, увеличивая значение переменной 
i до 2. И снова наступает время повторить цикл. 
При выполнении цикла в третий раз Flash проверяет значение условного  
выражения. На этот раз значение переменной i равно 2, а значение выражения 
address . length по-прежнему равно 12. Число 2 меньше 12, поэтому  
результатом условного выражения является значение true и среда Flash выполняет тело 
цикла в третий раз. Как и раньше, в теле цикла определяется, нужно ли выполнять 
код в условном операторе: 
if (address.charAt(i) == "@") { 
isValidAddress = true; 
Значение переменной i равно 2, поэтому выражение вызова addres s . charAt (i) 
преобразуется в выражение address . charAt B), которое возвращает символ "@". 
Символ "@" равен символу "@", поэтому среда Flash выполняет код в условном 
операторе, присваивая переменной isValidAddress значение true. После этого 
Flash выполняет корректор цикла, увеличивая значение переменной i до 3. 
Тело цикла будет выполнено еще девять раз. После завершения оператора цикла 
значением переменной i sVal idAddres s будет являться true. Это сообщает  
программе, что адрес электронной почты можно с уверенностью отправлять на сервер 
для дальнейшей обработки. 




BACK NEXT

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