スコープ
コレは普通。
var str1:String = "Global"; function scopeTest () { var str1:String = "Local"; trace(str1); // Local } scopeTest(); trace(str1); // Global
しかし、関数内ではブロックスコープが効かない!
function hoge(testArray:Array) { var i:int; var j:int for (vari:int; i < 10; i++) { // エラー trace(i); } { var j:int // エラー trace(j); }
変数宣言
複数宣言
var a:int, b:int, c:int; var a:int = 10, b:int = 20, c:int = 30;
こんなんはできないので注意!めんどくせー
var a,b,c:int;
キャスト
こんな感じ。javaとかと逆。
var myBoolean:Boolean = true; var myUINT:uint = uint(myBoolean); var myINT:int = int(myBoolean); var myNum:Number = Number(myBoolean);
定数
class A { public const MINIMUM:int = 0; public const MAXIMUM:int; public function A() { MAXIMUM = 10; } } var a:A = new A(); trace(a.MINIMUM); // 0 trace(a.MAXIMUM); // 10
ループ
for in
var myObj:Object = {x:20, y:30}; for (var i:String in myObj) { trace(i + ": " + myObj[i]); } // 出力 : // x: 20 // y: 30
配列のエレメントの繰り返し処理を実行することもできます。
var myArray:Array = ["one", "two", "three"]; for (var i:String in myArray) { trace(myArray[i]); } // 出力 : // one // two // three
for each
var myObj:Object = {x:20, y:30}; for each (var num in myObj) { trace(num); } // 出力 : // 20 // 30
次の例に示すように、XML または XMLList オブジェクトの繰り返し処理を実行することができます。
var myXML:XML = <users> <fname>Jane</fname> <fname>Susan</fname> <fname>John</fname> </users>; for each (var item in myXML.fname) { trace(item); } /* 出力 Jane Susan John */
以下の例が示すように、配列のエレメントの繰り返し処理を実行することもできます。
var myArray:Array = ["one", "two", "three"]; for each (var item in myArray) { trace(item); } // 出力 : // one // two // three
型チェック
is
スーパクラスのほか、インタフィスの実装有無もチェックする。
var mySprite:Sprite = new Sprite(); trace(mySprite is Sprite); // true trace(mySprite is DisplayObject); // true trace(mySprite is IEventDispatcher); // true
instanceof
インタフェイスの実装は判断できない
trace(mySprite instanceof Sprite); // true trace(mySprite instanceof DisplayObject); // true trace(mySprite instanceof IEventDispatcher); // false
as
booleanではなく、オブジェクトインスタンスもしくはnullを返す。
var mySprite:Sprite = new Sprite(); trace(mySprite as Sprite); // [ オブジェクト Sprite] trace(mySprite as DisplayObject); // [ オブジェクト Sprite] trace(mySprite as IEventDispatcher); // [ オブジェクト Sprite] trace(mySprite as Number); // null
ダイナミッククラス
Javascriptのようなクラス定義の仕方
dynamic class Test {} var myTest:Test = new Test(); // 関数式 myTest.functionExp = function () { trace("Function expression") }; myTest.functionExp(); // Function expression delete myTest.functionExp; myTest.functionExp(); // error
関数
通常の定義
function traceParameter(aParam:String) { trace(aParam); } traceParameter("hello"); // hello
式としての定義
var traceParameter:Function = function (aParam:String) { trace(aParam); }; traceParameter("hello"); // hello
関数式だとメソッド呼び出しできない
class Example { var methodExpression = function() {} function methodStatement() {} } var myEx:Example = new Example(); myEx.methodExpression(); // strict モードではエラー、standard モードでは OK myEx.methodStatement(); // strict モードと standard モードで OK
関数のスコープ
expressionTest(); // ランタイムエラー var expressionTest:Function = function () { trace("expressionTest"); }
デフォルトパラメータ
関数の末尾にデフォルト値を指定することができる。
function defaultValues(x:int, y:int = 3, z:int = 5):void { trace(x, y, z); } defaultValues(1); // 1 3 5
argumentsオブジェクト
関数の引数にアクセスできる。
function traceArgArray(x:int):void { for (var i:uint = 0; i < arguments.length; i++) { trace(arguments[i]); } } traceArgArray(1, 2, 3);
関数名にもアクセスできる。
var factorial:Function = function (x:uint) { if(x == 0) { return 1; } else { return (x * arguments.callee(x - 1)); }
}
可変引数(rest)
function traceArgArray(... args):void { for (var i:uint = 0; i < args.length; i++) { trace(args[i]); } } traceArgArray(1, 2, 3);
通常のパラーメタも使う場合は、最後に「...」を持ってくる function traceArgArray(x: int, ... args) { for (var i:uint = 0; i < args.length; i++) { trace(args[i]); } } traceArgArray(1, 2, 3);
クラス
セッターゲッター
class GetSet { private var privateProperty:String; public function get publicAccess():String { return privateProperty; } public function set publicAccess(setValue:String):void { privateProperty = setValue; } }