C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■86196 / )  Re[7]: bool変数の比較演算について
□投稿者/ ヒークン (4回)-(2017/12/24(Sun) 12:20:07)
2017/12/24(Sun) 12:23:05 編集(投稿者)

皆さん、回答ありがとうございました。

私はソフト開発会社に勤めているわけではないので、
一般的な開発ルール等は全く存じ上げないため、
おかしな質問があればそれはご容赦頂きたいのですが、
色々とお話しを伺う中で、一つ思ったのは、
場合によっては、否定分岐で「If a = False Then」とした方が安全な
環境があるのではないか、ということです。
この「環境」とは、OSや言語というよりは、開発者サイドの仕様だったり、
開発ルールの環境を指します

そう思った理由の一つとして、
WebSurferさんの■86171の例示

> if (expression) statement

の式では、expression == 0の場合は偽、それ以外は真と評価されます。
C言語のことは良く分かりませんが、VBでNot演算を行うと、
「Not expression」はexpressionのビット反転ですので、
expressionが0以外の場合の「Not expression」は、
すべてのビットに1が立っている場合でないと0にはなりません。

このことに気づいたのが、とっちゃんさんの■86177にあった

> #define VARIANT_TRUE ((VARIANT_BOOL)-1)

です。
「1」ではなく、あえて負号付きの「-1」ということは、
これが1ビットではなく、複数ビットであることが分かります。
VBAのVARIANT変数のサイズは勉強不足で分かりませんが、
仮に1バイトだとすると、-1はすべてのビットに1が立っている
&FF(0xFF)ということでしょうか。

そうなると、通常はあり得ないことかも知れませんが、物理的な可能性として
「0または-1を返すメソッドから、バグや何かの間違いで、
それ以外の値が戻ってくる場合がある」ことは0%とは言えないかも知れません。
(限りなく0%でしょうが。)

そこで、「If a = False Then」という式評価を推奨する環境がある、
ということであれば、一定の理解はできます。

しかしながら、「If a = True Then」はどうも受け付けません。
「頭痛が痛い」と言っているのと同じような気がします。(分かり難いたとえでスミマセン)


> if (a==true) に違和感があるという印象はとても素敵だと思う。その感覚を大事にして欲しい。

権威のある方にお褒め頂くことは、非常にうれしい限りです。
しかしながら、if (a==true)(VBのIf a = True Then)は
先程申し上げた通り、違和感「しかない」です。
返信 編集キー/


管理者用

- Child Tree -