Пишучи флеш-гру на ActionScript 3, я практично щоденно змушений пропускати через себе нові масиви інформації. Далеко не завжди є можливість швидко і детально поділитися нею на сторінках блога. Тому навчальні статті з ActionScript, які я викладаю на блозі, часто “відстають” від знань, які я отримую і намагаюсь реалізувати на практиці. Як наслідок, доводиться іноді зупиняти себе в бажанні написати матеріал про “просунуті” аспекти програмування і повертатися до основ. Адже я хочу створити цілісну підбірку уроків, які при бажанні зможе зрозуміти і засвоїти навіть абсолютний новачок.
Тому підбираючи тему для сьогоднішнього уроку я вирішив розповісти про абсолютно базове поняття, яке відоме кожному AS-програмісту і без якого неможливо створити жодну серйозну флеш-програму. Йдеться про використання змінних (variables) у коді ActionScript.
Частково ми вже дотикалися до цієї теми і використовували змінні, наприклад, в уроці про генерування випадкових чисел, де значення методу Math.random присвоювалося змінній.
Сьогоднішній урок носитиме переважно теоретичний характер. Але з часом ви побачите, як часто ця “теорія” застосовується на практиці.
Що таке змінні з точки зору ActionScript 3
Змінна (variable) – це ідентифікатор (тобто ім’я), яке асоціюється зі значенням. Цим значенням по суті може бути будь-який об’єкт, який розглядається як незалежний фрагмент даних (інформації). В ActionScript існує тільки два “спеціальні” значення, які не є об’єктами – null і undefined – вони вказують на так зване “порожнє значення” (тобто те, що до змінної не прив’язаний жоден об’єкт).
Однією із найпростіших і найбільш зручних аналогій, яка використовується у книзі Foundation Game Design with Flash і дозволяє найкраще зрозуміти поняття змінних – є коробка. Ви можете уявити, що змінна – це своєрідна порожня коробка, в якій зберігається інформація – тобто по суті будь-який об’єкт. Кожна коробка має свою власну назву і може зберігати різні типи інформації.
Щоб було ще зрозуміліше, уявімо кухню, в якій знаходиться багато красивих посудин для різних сипучих речовин: солі, перцю, цукру, круп тощо. Посудини непрозорі, але підписані. Кожна господиня відразу зрозуміє, в якій із посудин що знаходиться, якщо прочитає написи.
Змінні, як і посудини в кухні, також мають підписи, які вказують на тип інформації, який в них знаходиться.
Ось як оголошується змінна в мові ActionScript 3:
var number: Number;
За що відповідає кожен з елементів цієї функції?
var – це, власне, оголошення самої змінної (від слова variable). Ключове слово, яке вказує програмі, що ви створюєте нову змінну;
number – це унікальна назва вашої змінної. Ви можете використати будь-яке ім’я, яке вам сподобається чи буде краще описувати вашу змінну. Я використав ім’я number тільки в описових цілях, але ще раз повторюся – це може бути що-завгодно. Будь-яка абракадабра! Власне, це і є ваш ідентифікатор. Тепер ви можете звертатися до інформації, закладеної у змінній, використавши її ім’я;
Number – а це тип змінної, який буде прив’язаний до ім’я. Ключове слово Number вказує нам, що змінна буде числом. Детальніше про різні типи змінних я напишу трохи далі у цій статті.
Якщо ми хочемо створити змінну, яка відповідатиме за вік персонажа у грі, ми можемо оголосити її, наприклад, так:
var age: Number;
Таким чином ми створюємо змінну age типу Number. Як бачите, ім’я змінної тепер повністю описує її суть. І побачивши ім’я – ми зразу зрозуміємо, що йдеться про вік.
Отже, ми створили ідентифікатор, але він поки-що порожній. Для того, щоб до змінної було прив’язано значення, його потрібно присвоїти. Робиться це, наприклад, таким чином:
var age: Number = 18;
В цій стрічці ми присвоїли значення 18 змінній age на етапі її оголошення. Можна присвоювати значення і після оголошення:
var age: Number; age = 18;
Але запам’ятайте, що оголошення змінної завжди повинне передувати присвоєнню значення. Тобто код:
age = 18; var age: Number;
буде некоректним.
Тепер, якщо вам знадобиться інформація, яка знаходиться в “коробці” змінної age, ми можемо отримати її, використавши ім’я змінної в програмі. Спробуйте написати коротку програму:
var age: Number; age = 18; //функція trace видасть значення age на етапі тестування програми у Flash IDE trace(age);
і ви побачите, що функція trace видасть значення змінної age у спеціальному вікні під час тестування програми (якщо ви робитимете це у Flash IDE). Зверніть увагу, що це буде саме значення – тобто 18, – а не ім’я – тобто age.
Ви також можете “очистити коробку” в будь-який час чи “вкласти” в неї нову інформацію. Саме тому це і називається змінною.
Програма
var age: Number; age = 18; age = 21; trace(age);
Видасть результат трейсінгу 21. Якщо розглянути, що відбувається у програмі:
- спершу оголошується змінна age;
- потім змінній age присвоюється значення 18;
- потім значення 18 “видаляється” і змінній age присвоюється значення 21 (при присвоєнні нового значення попереднє видаляється автоматично);
- потім програма виводить значення змінної age.
Основна мета змінних – відстежувати інформацію в програмі. Саме вони дозволяють “звертатися” до об’єкта після його створення.
Типи змінних
В попередньому прикладі ми використовували тільки один тип змінної – числове значення (Number). Втім, як уже згадувалося, змінна може бути будь-якого типу і містити будь-який об’єкт (включаючи створені користувачем класи). Тому оголошуючи змінну вам потрібно вказати, який тип інформації у ній знаходитиметься (строго кажучи, оголошення типів необов’язкове, але дуже бажане). Уявіть, що у вас є посудина з написом “Цукор”, а ви насипали туди сіль. От здивується ваш гість, коли вирішить заварити собі чайку.
У AS3 ви точнісінько так само вказуєте програмі, який тип інформації буде зберігатися у змінній.
У ActionScript 3 існує кілька основних типів змінних, які ми розглянемо нижче:
- Boolean – може приймати всього одне із двох значень: true (правда) або false (неправда). За замовчуванням значення змінної Boolean – true;
- Number – цю змінну ми вже розглядали. Вона може приймати значення будь-якого числа, включаючи цілі числа (integers) та дроби (числа з плаваючою комою);
- int – ціле число (integer). Може бути як від’ємним так і додатним. Якщо ви точно знаєте, що ваше значення буде цілим, краще використовувати тип змінної int, а не Number, тому що він використовує менше процесорних ресурсів комп’ютера, які точно знадобляться вам при розробці складних ігор;
- uint – (unsigned integer) ціле число, яке може бути тільки додатним. Значення за замовчуванням – 0;
- String – літери, слова або фрази – тобто будь-яка текстова інформація. Ви можете використовувати тип змінної String навіть для того, щоб зберігати цифри, але в такому разі цифри інтерпретуватимуться як текст (тобто з ними не можна буде виконувати математичних операцій). Значення змінної String за замовчуванням – null – тобто відсутність будь-якої інформації;
- Object – загальний тип. Object – це базовий клас будь-якого об’єкта в AS3. Значення за замовчуванням також – null;
- void – дуже специфічний тип, який використовується тільки у зв’язку з методами, які не повертають жодних значень. Він не використовується для оголошень змінних і може зберігати тільки одне значення: undefined. Ми ще зустрінемося з типом void у наших програмах і тоді його використання стане більш зрозумілим. Поки що можна сприймати void, як відсутність будь-якого значення;
- * (зірочка) – якщо ви хочете створити змінну, яка не має визначеного типу, або ж вона повинна бути дійсно гнучкою і мати змогу використовувати різні типи даних, можна використати зірочку, як оголошення типу даних. Наприклад, ось так:
var age:*;
Скажу лишень, що тип “зірочка” я у своїх програмах ще жодного разу не використовував. Всі підручники в один голос “кричать” про небажаність використання цього типу, тому по можливості краще його уникати. Але, чесно кажучи, я й не бачу ситуації, в якій він був би критично необхідним.
Зверніть увагу, що всі типи даних оголошуються з великої літери, окрім типів int, uint та void (у ActionScript регістр завжди має значення).
Що ж, сподіваюся ви не дуже втомилися від теоретичної статті. Розуміння змінних та типів змінних має велике значення для програмування. І обіцяю, що наступний урок буде більш практичним.
Якщо залишилися питання щодо змінних, не соромтеся задавати їх у коментарях.