以前に書いた記事 「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>
【実行結果】
実行結果としてわかったことは、
- 「0」という数字は false として評価される
- false の否定である 「!0」 は true として評価される (当たり前ですが…)
- 「0」以外の数字は、条件式ですべて true として評価される
- 「0」以外の数字は as演算子でキャストすると null になっている (Booleanでキャストできていない)
ソースにはありませんが、if("あああ") などの様に文字列を使用した場合にも、必ず true として評価されていました。
つまり、 boolean型の true/false の代替としては、0 を false の代わりに使うことはできるが、0 以外の値はすべて true と評価されてしまうので使用することができないことがわかりました。