各プログラミング言語に精通した方の監修の下、それぞれの言語に関する知識や認識についての、習熟度や理解度を確認するためのテストをお届けする「Code Comprehension」。第1回の解答です。
こんにちは。BeInteractive!のyossyです。Code Comprehension Testの1発目としてお届けした、ActionScript理解度テスト【その1】はいかがでしたでしょうか。さっそく解答編をお届けしたいと思います。
var a:uint = 0;
trace(a++);
var b:uint = 0;
trace(++b);
0
1
これはプログラミングの初歩ですね。a++の場合は加算前の値が、++aの場合は加算後の値が返ります。
var list:Array = [1,2,3,4,5];
var copy:Array = list;
copy[0] = 6;
trace(list);
trace(copy);
6,2,3,4,5
6,2,3,4,5
初心者の人がよく間違う、配列のコピー「したつもり」コードです。配列を代入する場合、参照が代入されるので、それをいじると元の配列が変更されます。
var o:Object = new Object();
o.a = 1;
o.f = function():void
{
trace(this.a);
}
var f:Function = o.f;
f();
undefined
一見、単にo.fを呼び出しているだけに見えますが、そうではありません。この場合、thisにoは渡されないので、o上のプロパティを参照することはできません。
f.apply(o);
などを使いましょう。
var a:String = 'hoge';
var b:String = 'fuga';
trace(a || b);
trace(a && b);
hoge
fuga
こちらの詳細については、「論理和演算子||(OR)二重のバグ」を参考にしてください。
function f():String { return 'f'; }
function f2():String { return 'f2'; }
var a:String;
var b:String;
if ((a = f()) || (b = f2())) {
trace(a);
trace(b);
}
f
null
論理演算で、最初の式が成り立っていれば次が実行されないという、Perlでよく使われているものですね。
Copyright © ITmedia, Inc. All Rights Reserved.