feb19.jp blog - life is creative!

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

ブックマークに追加する tags:   

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

2010年02月11日11:52

Webデザインブログ

「AS3 の演算子 ||= について」の関連エントリー

 iTunes Store(Japan)

コメントを投稿

トラックバック

このエントリーのトラックバックURL:
http://feb19.jp/mt/mt-tb.cgi/188

Navigation

古:iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
新:iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
トップページ

Recently Entries
Mac でファイルの関連付けを変える(Mac で AIR アプリがアップデート出来ないを解決する方法)
ファイルを右クリックして「情報を見る」を選び、表示されたウィンドウの...
Mac OS X 10.6 Snow Leopard から入ってるフォント「Menlo」がコーディング作業にいい感じ
Xcode でコード書いているとき、Eclipse でコード書くより...
AIR で JSON 形式ファイルの入出力
AIR 祭り開催中。今回はファイル入出力。AS3 で扱っている Ob...
Adobe CS5 ティザーサイトオープン
カウントダウンが始まっています。いよいよ CS5 ですね。globa...
AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する
最近また AIR が楽しい気がして触っているのですが、 Google...
iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
BPM 計測アプリです。既に似たようなアプリはいくつか発売されている...
AS3 の演算子 ||= について
AS3 だけでつかえるものではないのですが、AS3 での動作を確認し...
iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
Objective-C では、高位のフレームワークで、低位のフレーム...
Flash CS4 で Flex SDK (mx パッケージ、クラス) を使う
Flex 用のライブラリとかを見ると mx パッケージとか使われてい...
Flash CS5 を予習 ~Text Layout Framework (TLF) 編~
Text Layout Framework (TLF) を使って、F...