Skip to content

Smart Variables (ru)

Dima Kruk edited this page Feb 12, 2013 · 6 revisions

SmartVariables - языковое расширение, которое дает более сжатый синтаксис инициализации переменных. Иногда синтаксис описания переменной в ActionScript3 может показаться избыточным и слишком многословным. Расширение SmartVariables предоставляет дополнительную возможность для создания новых переменных в компактном стиле(без использования ключевого слова var и указания типа).

Это особенно полезно в условных операторах (if-then-else) или при сложном описании объекта (вместе с языковым расширением ObjectBuilder).

Кроме того, в отличие от переменных без указания типа, смарт-переменные контекстно-ориентированы. При создании смарт-переменной, её тип будет автоматически определён из контекста. Это означает, что проверка типов и автозаполнение будут работать со смарт-переменными.

// без Smart Variables
var s : Sprite = this; 
if (s is MovieClip) { 
  var mc : MovieClip = s as MovieClip; 
  if (mc.currentFrame > 1 && mc.totalFrames > 10) { 
     
  } 
}

Использование SmartVariables позволяет избавиться от двух проблем:

  • чрезмерного создания переменных;
  • необоснованного копирования кода.
// с Smart Variables
var s : Sprite = this; 
if (s is MovieClip && (mc:(s as MovieClip)).currentFrame > 1 && mc.totalFrames > 10) { 
   
}

##Синтаксис

###variableName : expression

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

var s : String = "hello"; // переменная
s:"hello"; // smart Variable

Используйте эту конструкцию с осторожностью. Несмотря на свой компактный вид, если использовать его за пределами условного оператора или инициализацией объекта с ObjectBuilder, она может сильно уменьшить читабельность кода.

##Использование Smart Variables вместе с ObjectBuilder

Как и ObjectBuilder, Smart Variables возникли под влиянием синтаксиса функциональных языков, таких как JavaFX, Scala или Ruby. Сочетание этих языковых расширений делает Ваш код более кратким и читаемым.

sp:Sprite{ 
  width : 100; 
  height : 100; 
};
this.addChild(sp);

Clone this wiki locally