[Flex][ActionScript3]boolean型の値は 0=false, 0以外=true となっている?

以前に書いた記事 「boolean型の値は false=0,true=1 になっている」 で記載した内容に関して、一部誤りが発覚しましたので、こちらにその検証の続きを記載します。

解釈が誤っていた点

★ false=0 / true=1 ではなくて、 0=false / 0以外の値は true となる

 

下記のソースで検証します。
if文の条件に true/false ではなく、0, 1, 255 という数字を使用して評価します。評価対象になった場合には、VBoxコンテナの中にLabelを追加してメッセージを表示するつくりになっています。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" horizontalAlign="center" creationComplete="onCreationComplete()">

<mx:Script>
    <![CDATA[
        import mx.controls.Label;
        
        private function onCreationComplete():void
        {
            if (0) {
                 addLabel("0");
                 trace(0 as Boolean);
            }
            
            // 評価される → as演算子でキャストした結果は「true」
            if (!0) {
                addLabel("!0");
                trace(!0 as Boolean);
            }
            
            // 評価される → as演算子でキャストした結果は「null」
            if (1) {
                addLabel("1");
                trace(1 as Boolean);
            }
            
            if (!1) {
                addLabel("!1");
                trace(!1 as Boolean);
            }
            
            // 評価される → as演算子でキャストした結果は「null」
            if (255) {
                addLabel("255");
                trace(255 as Boolean);
            }
            
            if (!255) {
                addLabel("!255");
                trace(!255 as Boolean);
            }     
        }
        
        private function addLabel(msg:String):void
        {
            var lbl:Label = new Label();
            lbl.text = "「" + msg + "」 は評価されました";
            showList.addChild(lbl);
        }
        
    ]]>
</mx:Script>

    <mx:VBox id="showList" horizontalAlign="center" fontSize="15" fontWeight="bold" />

</mx:Application>

【実行結果】

booleanEvaluation.png

実行結果としてわかったことは、

  • 「0」という数字は false として評価される
  • false の否定である 「!0」 は true として評価される (当たり前ですが…)
  • 「0」以外の数字は、条件式ですべて true として評価される
  • 「0」以外の数字は as演算子でキャストすると null になっている (Booleanでキャストできていない)

ソースにはありませんが、if("あああ")  などの様に文字列を使用した場合にも、必ず true として評価されていました。

つまり、 boolean型の true/false の代替としては、0 を false の代わりに使うことはできるが、0 以外の値はすべて true と評価されてしまうので使用することができないことがわかりました。

このブログについて

このブログは吉祥寺にあるブレインチャイルド株式会社の社員で投稿しています。
業務ではまってしまったことや発見したこと。
自分達で新たに学習してみようと思って勉強し始めたことなどを綴っています。
こんな社員が働いているブレインチャイルドに興味がわいててきたなら、是非お問い合わせください。
会社案内
求人案内
先輩のコメント