ActionScript理解度テスト【その2解答編】:Code Comprehension(2/2 ページ)
各プログラミング言語に精通した方の監修の下、それぞれの言語に関する知識や認識についての習熟度や理解度を確認する「Code Comprehension」。ActionScript理解度【その2】の解答です。
問16.AS2におけるビット演算時の数値の扱い
trace((0xffff0000 | 0x0000ffff));
出力
-1
一見4294967295になりそうですが、ビット演算をするとなぜかsigned(符号付)値として認識されてしまいます。単に0xffffffffだと違います。
問17.クラスメンバの列挙
public dynamic class Hoge
{
public var a:uint = 1;
public var b:uint = 1;
public function Hoge()
{
b = 2;
}
public function calc():uint
{
return a + b;
}
}
var h:Hoge = new Hoge();
h.c = 3;
for (var prop:String in h) {
trace(prop);
}
出力
c
ActionScript3では、dynamicなクラスに対して、実行時に追加されたプロパティのみが列挙されます。
問18.クラス内withの罠
public class Hoge
{
public function Hoge()
{
var list:Array = [];
with(list) {
trace(length);
}
}
private var length:uint = 100;
}
var h:Hoge = new Hoge();
出力
100
withの作用によってlist.lengthが出力されるかと思いきや、バグでメンバ変数のlengthが出力されます。詳しくはこちらを参照してみてください。
問19.Arrayキャストの罠
function add(obj:Object):Array
{
obj.push.apply(obj, [4, 5]);
return Array(obj);
}
var obj:Object = [1, 2, 3];
trace(add(obj).length);
出力
1
Array()は新しい配列を生成する組み込み関数であるため、問題の4行目のようにArray型へキャストしようという意図で使うと失敗します。
問20.代入バグ
var a:uint = 0;
function f():uint { return a++; }
var list:Array = [1,2,3,4,5];
list[f()] += 1;
list[f()] += 1;
trace(list);
出力
3,2,5,4,5
一見2,3,3,4,5になるように思えますが、Flashのコード生成にバグがあり、次のようなコードが生成されます。
list[f()] = list[f()] + 1;
つまり、1回の代入演算で関数fが2回呼び出されます。それによって、上記のような結果になります。
2回にわたってお届けしてきたActionScript理解度テストですが、いかがでしたでしょうか。今回の問題が解けないからといって、ActionScriptの習得をあきらめてしまう必要はまったくありません。ActionScriptで分からないことがあれば、Flash/ActionScript開発のためのオープンソースコミュニティー「Spark project」などで質問すれば、必ず答えにたどり着けるでしょう。あなたがActionScriptのディープな世界へ来るのをお待ちしています。
関連キーワード
ActionScript | テスト | Code Comprehension | Flash | Adobe Systems(アドビシステムズ) | プログラミング | Open Screen Project
関連記事
- ActionScript理解度テスト【その1】
各プログラミング言語に精通した方の監修の下、それぞれの言語に関する知識や認識についての、習熟度や理解度を確認するためのテストをお届けする「Code Comprehension」。第1回は、BeInteractive!のyossy氏によるActionScript理解度テストだ。 - ActionScript理解度テスト【その1解答編】
- ActionScript理解度テスト【その2】
各プログラミング言語に精通した方の監修の下、それぞれの言語に関する知識や認識についての、習熟度や理解度を確認するためのテストをお届けする「Code Comprehension」。引き続き、ActionScript理解度テストをお届けしよう。 - 新藤愛大――欲望という幻想を現実に変えるActionScripter
ソフトウェアとハードウェアの両方に精通し、世の中を変革しようと牙を研ぐバイナリアンたちを紹介していく「New Generation Chronicle:バイナリアンスレッド」。第3回は、若くして国内のFlash/ActionScript界をけん引する新藤愛大氏に登場いただいた。 - Adobe、「Open Screen Project」でFlashをオープンに
Adobeは一貫したFlash実行環境を実現するため、SWF仕様の制限を廃し、APIやプロトコルを公開し、ライセンス料を撤廃する。
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.