feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3 の演算子 ||= について

AS3 の演算子 ||= について

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 のヘルプにまるっとガッツリ美しくまとまってました。俺、要熟読。

Tweet Share Bookmark

Navigation

prev: iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
next: AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する

Recently Entries