
AS3 だけでつかえるものではないのですが、AS3 での動作を確認したのでこんな表題にしました。最近巷ではやっている最速文法マスターの、AS3編で、見慣れない演算子「||=」というものがあったので、これについて調べてみました。
||= ダブルパイプイコール は、 a ||= b というふうに使います。a += b でいう a = a + b みたいなもので、a || = b を分解すると a = a || b と同じになります。
働きは、a の値が undefined (null) だった場合に、b を代入します。
なので、
var i:int;
i ||= 120;
trace(i); // 120
になり、
var i:int;
i = 5;
i ||= 120;
trace(i); // 5
となります。
原理を調べてみましょう。
|| 演算子は、「ショートサーキット」と呼ばれる特性を持ちます。
|| は論理和演算子なので、よく if 文などで使いますが、 if (mc || mc.parent) とした場合、評価の中ですでに mc が存在していれば、評価は true となり、 mc.parent は評価されません。この特性のことです。
つまり a ||= b の場合、 a = a || b となるので、 a がすでに存在している場合は a の値、 存在していない場合は与える値を代入してくれるのです。
import flash.display.MovieClip;
var mc:MovieClip;
mc = new MovieClipSubClass1();
trace(mc); // MovieClipSubClass1
mc |= new MovieClipSubClass2();
trace(mc); // MovieClipSubClass1
ちなみに、||= ではなく、|= と、パイプ(|)が一つしかない場合は、ビット列の論理和をとる演算になります。これは ByteArray や BitmapData の計算時にたまに使いますね。
|= パイプイコール
a |= b の場合、a = a | b と同じ意味になります。
ビットの単位の論理和演算子です。
var n:int;
n = 2000;
n |= 130;
trace(n); // 2002
「ビット」の論理和を取るので、数値を .toNumber(2) で二進数に変換してみると・・・
2000 : 11111010000
130 : 00010000010
です。論理和(同じ桁同士で、どちらか一方または両方が 1 なら 1 になり、どちらも 0 なら 0)を取ると、
2002 : 11111010010
になります。
これはビットの計算(数値、Number)用の演算子なので、当たり前ですが ||= のように MovieClip などには使えません(シンタックスエラーが出力されます)。
と、色々あるもんだ~ね~。
もちろん他にも色々あるみたいです。
って Adobe のヘルプにまるっとガッツリ美しくまとまってました。俺、要熟読。

