スコープ
コレは普通。
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;
}
}
