for, for in, for each in
for文は3つあります。
- 「for」は初期条件、繰り返し条件、継続処理からなるよくある(?)forです。javaのforと同じ。
- 「for in」「for each in」はオブジェクトのプロパティを列挙します。
- 「for in」では、プロパティのキー(配列の場合、インデックス)が順番に渡されます。
- 「for each in」では、プロパティの値そのものが順番に渡されます。
for_loop.as:
public const array:Array = [ "a", 1, true ] public const obj:Object = { a:"a", b:1, c:true } // メイン public function main():void { // for stdout.text += "for (Array)---\n"; for ( var i:int; i < array.length; i++ ) { stdout.text += " " + i + " : " + array[i] + "\n"; } // for in / プロパティのキーが渡される stdout.text += "\nfor in (Array)---\n"; for ( var j:String in array ) { stdout.text += " " + j + " : " + array[j] + "\n"; } stdout.text += "\nfor in (Object)---\n"; for ( var k:String in obj ) { stdout.text += " " + k + " : " + obj[k] + "\n"; } // for each in / プロパティ値がそのまま渡される stdout.text += "\nfor each in (Array)---\n"; for each ( var l:Object in array ) { stdout.text += " " + l + "\n"; } stdout.text += "\nfor each in (Object)---\n"; for each ( var m:Object in obj ) { stdout.text += " " + m + "\n"; } }
for_loop.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete = "main()" > <mx:TextArea id="stdout" width="200" height="200" /> <mx:Script source="./for_loop.as"/> </mx:Application>
for文内で宣言した変数のスコープ
ActionScriptにはブロックスコープはありません。for文の初期条件などで宣言した変数は外側のスコープに属します。
public const array:Array = [ "a", 1, true ] // メイン public function main():void { // for 初期条件で 変数 i を宣言 for ( var i:int; i < array.length; i++ ) {} // i は外側のスコープに属するため、forの外でもアクセスできる。 stdout.text += i ; }