サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

データのブール(論理)値評価

ID: FN0604004 Product: Flash

Platform: All
Version: Flash MX 2004 and above

ActionScriptでは、処理の必要に応じて、データ型が自動的に変換されることがあります。本稿では、データをブール(論理)値[*1]として評価した場合に、値がどのように変換されるかをまとめています。

[*1] ブール(論理)値(boolean)とは、trueおよびfalseの二値のみで表されるデータ型です。0/1のデジタルでデータを扱うコンピュータにとって、もっとも基本的な値といえます。

なお、ブール(boolean)という呼び名は、コンピュータを理論的に支える記号論理学であるブール代数の提唱者ジョージ・ブールから採られたものです。

1. データがブール(論理)値として評価される場合
データをブール(論理)値として扱う典型的な場合は、ifステートメントの条件でしょう。if条件には、「式」を指定します。この場合の「式」は、論理式にかぎりません。変数/プロパティでも関数/メソッドでも、単純な数値などのプリミティブ値でも構いません。

if条件は、ブール(論理)値として評価されます。「評価」するというのは、指定されたコンテキストで、つまりこの場合ではブール(論理)値として、データを扱うために必要な処理や判定を加えて、結果の値を取得することです。ブール(論理)値コンテキストで評価した結果は、当然truefalseかのブール値でなければなりません。

つまり、if条件をブール(論理)値評価すると、条件としてどのような式が与えられたとしても、必ずtruefalseかどちらかの値が返されることになります。if条件に指定する式と、それを評価した結果については、F-site「if (condition=1)」をご参照ください。データをブール(論理)値評価する場合として、他には条件(3項)演算子? :論理否定演算子!オペランドなどが挙げられます。

2. データをブール(論理)値として評価した結果
各種のデータをブール(論理)値として評価した場合、どのような値に変換されるかは、以下の表001のとおりです[*2]。Flash Player 7から、ストリングについてFlash Player 6以前と扱いが変わったことにご注意ください(「ECMA-262準拠」参照)。

表001■データのブール(論理)値評価
データタイプ[*3] Flash Player 7以降にパブリッシュしたSWF Flash Player 6以前にパブリッシュしたSWF
undefined (未定義値) false
null false
ブール(論理)値 変換されない(falsefalsetruetrueのまま)。
数値 0とNaNfalse、それ以外の数値はtrue
文字列 空文字列(長さ0)であればfalse、それ以外の文字列はtrue 0以外の数値に変換できればtrue、それ以外の文字列はfalse
オブジェクト true

[*2] 基本的に、ECMA-262標準第3版(ECMA-262 Edition 3)に準拠します。具体的には、「9.2 ToBoolean」がその仕様を定めます。Flash Player 6以前の文字列のブール(論理)値評価がECMA-262と異なるのは、Flash Player 4との互換性をはかるための仕様でした。

[*3] 前述注釈[*1]のECMA-262第3版は、厳密な型指定のないActionScript 1.0からの仕様ですから、「データタイプ」は型指定のデータ型とは異なります。むしろ、typeof演算子の戻り値に近いタイプ分けです。

たとえば、つぎのような例で、その違いが生じます(スクリプト001)。

スクリプト001■プリミティブ数値とNumberインスタンスとの違い

// var n:Number = 0; // [1]プリミティブ数値
var n:Number = new Number(0); // [2]Numberインスタンス
trace([typeof n, n instanceof Number]);
if (n) {
   trace(true);
} else {
   trace(false);
}

// [2]Numberインスタンスの場合の[出力]:
object,true
true

// [1]プリミティブ数値の場合の[出力]:
number,false
false

_____

作成者: 野中文雄
作成日: 2006年4月29日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.