Руководство по actionscript. часть 1, стр. 093
Public class StringUtils { public function contains (string, character) { for (var i:int = 0; i <= string.length: i++) { if (string.charat(i) == character) { return true;
}
}
return false;
}
}
В следующем примере кода показано, как наше приложение могло бы использовать метод contains( ), чтобы проверить, содержит ли указанный адрес электронной почты символ @:
StringLIti 1 s. contains(«me@moock. org», «@»);
Конечно, в реальном приложении адрес электронной почты вводил бы сам пользователь и метод contains ( ) определял бы допустимость отправки формы на сервер. Следующий код демонстрирует более реалистичную ситуацию:
if (StringUtils. contains(userEmai1, «@»)) { // Этот код отправлял бы форму на сервер } else {
// Этот код отображал бы сообщение «Неправильные данные» для пользователя
}
Помимо статических методов, которые создаются вручную, среда выполнения Flash автоматически создает для каждого класса один статический метод, называемый инициализатором класса. Познакомимся с ним поближе.
Инициализатор класса. После определения класса на этапе выполнения программы среда Flash автоматически создает и исполняет метод, называемый инициализатором класса. В нем среда Flash размещает все инициализаторы статических
переменных данного класса и весь код уровня класса, не относящийся к описаниям переменных или методов.
Инициализатор класса предоставляет возможность выполнять однократные задачи настройки сразу после определения класса, вызывая методы или обращаясь к переменным, являющимся внешними по отношению к текущему классу. Предположим, что мы создаем приложение для чтения электронной почты и хотим, чтобы внешний вид этого приложения соответствовал графическому стилю операционной системы. Чтобы определить, какая графическая тема должна быть использована в почтовом клиенте, в инициализаторе основного класса приложения Mail Reader проверяется текущая операционная система и присваивается соответствующее значение статической переменной theme. Переменная theme хранит информацию о графической теме, используемой в данном приложении. В следующем коде продемонстрирован инициализатор для класса Mail Reader. Для проверки операционной системы в классе MailReader используется статическая переменная os, определенная всобственном классе flash, system. Capabilities.
package { import flash. system.*;
public class MailReader { static var theme; if (Capabilities. os == «MacOS») {
theme = «MAC»; } else if (Capabilities. os == «Linux») {
theme = «LINUX»; } else {
theme = «WINDOWS»;
}
}
}
Код, размещаемый в инициализаторе класса, выполняется в режиме интерпретации, и JIT-компилятор не компилирует его. Динамически откомпилированный код выполняется гораздо быстрее интерпретируемого кода, поэтому в тех случаях, когда на первом месте стоит вопрос производительности, код, интенсивно использующий ресурсы процессора, следует выносить за пределы инициализатора класса.
Объекты Class
Как мы уже знаем, обращение к каждому статическому методу и к каждой статической переменной осуществляется через класс, в котором они определены. Например, для обращения к статической переменной maxCalories, заданной в классе VirtualPet, мы применяем следующий код:
Virtual Pet. maxCalories
Использование имени класса VirtualPet в предыдущем коде является не просто особенностью синтаксиса; на самом деле имя класса VirtualPet ссылается
на объект, в котором определена переменная maxCalories. Объект, на который ссылается имя класса VirtualPet, является автоматически создаваемым экземпляром собственного класса Class.
Во время выполнения программы каждый класс в языке ActionScript представляется экземпляром класса Class. С точки зрения программиста, объекты Class используются в основном для доступа к статическим переменным и методам класса. Тем не менее, как и любые другие объекты, они являются значениями которые могут быть присвоены переменным, переданы или возвращены из методов и функций. Например, в следующей модифицированной версии нашегс класса VirtualPet переменной vp присваивается объект Class, представляющий класс VirtualPet, после чего эта переменная используется для создания объекта VirtualPet: