2018年11月6日火曜日

動的配列が初期化されているかどうかの判定

ググると 「If Not Not AnyArray Then」でFalseが返ってくれば初期化されていなくて、Trueが返ってくれば初期化済みって書いてあります。

仕組みとしては、初期化されていない動的配列について、Not演算子は-1を返すということを使っています。
配列の型にかかわらず-1が戻ってきます。

で、更に、Not演算子は整数値の-1に対しては符号を含めた論理否定演算を実行して0を返すので、VB(A)で(Not Not 未初期化配列)をIf判定すると0がBooleanに型変換されFalseとなります。
んで、繰り返しっぽくなりますが、、
初期化されている動的配列について、Not演算子は負の-1じゃない値を返します。
んでんで、-1じゃない負の数については、Not演算子は数値式の符号を含めてビット毎の論理否定演算を実行するため0以外の正の数値を返します。
VB(A)ではBooleanに0以外の数値が与えられた場合はTrueを返すので、(Not Not 初期化済み配列)をIf判定するとTrueになります。

と、まあ、説明を読んでも、誰かに説明されても正直よくわからないわけです。

で、結局、初期化されてない配列については、Not演算子が-1を返すよってのだけでよくね?って話です。

結論


(Not 動的配列) = -1 なら初期化されていません。

注意


Not 動的配列 の部分は括弧で囲わないと正しくビット毎の演算ができません、だそうです。
    Sub 動的配列の初期化判定()
        Dim arr() As 型はなんでも
        If (Not arr) = -1 Then
            ''初期化されてない
        Else
            ''初期化済み
        End If
    End Sub

0 件のコメント:

コメントを投稿