No.3ベストアンサー
- 回答日時:
結論だけから言うと,既に2chさんが回答なさったとおりです。
C/C++やVBをはじめ,多くの言語で数値のゼロと論理のFALSEは同じものと取り扱えます。ご質問はVBについてですが,例えばC言語ではTRUEやFALSEがもともと定義されていないので,“#define FALSE 0”(FALSEとは0のことである)とヘッダで定義してやることが多いです。そのくらい,コンピュータにとってゼロとFALSEは同じものなのです。
FALSEがゼロならば,FALSEでないもの,つまりTRUEは,ゼロでないもの,ということになります。またまた余談ですが,便宜上TRUEを-1と定義するプログラムがよくありますが,-1以外ゼロ以外の値がTRUEでないと判断される危険があるので私は好きでありません。正しいプログラムでは,ゼロでないすべての値がTRUEと扱われます。
型の意識が比較的薄いVBプログラミングにおいて,Boolean型に暗黙の型変換(キャスト)が起こっていると推測されたこと自体は,非常に良い考え方だと思います。
Javaのように(しか思いつきませんが),型にうるさい言語では,ご質問と同様のif文を書くと,まさにご質問の通り,“そこは論理型ぢゃい”というエラーが出ます。
将来の他の言語への展開(或いは他の言語からVBに入った方だったら失礼)も考えると,“型にうるさくない”VBを使うのであっても,kistuneさんが今後も“型にうるさい”人であり続けることをお奨めします。
No.4
- 回答日時:
# ドしろうとの分際で専門家のコメントに補足するのは恐れ多いのですが......。
> 便宜上TRUEを-1と定義するプログラムがよくありますが
VB (6.0以前) でTrueが-1 (ゼロのビット反転) となるのは、AND / OR で論理演算とビット演算の両方を兼用させるための仕様と思われます。
このため、他のプログラミング言語では可能な「短絡評価 (ショートサーキット)」ができる演算子がVBには存在しません。
※ C言語では、論理演算子とビット演算子は別の演算子となっています。
If (条件式Left) And | Or (条件式Right) Then
といった条件文では、左辺式(条件式Left)の結果如何に関わらず、必ず右辺式(条件式Right)も評価されます。
プログラムの内容次第ではこれは、パフォーマンス (処理性能) に影響しかねないため、VB.NETでは短絡評価用の演算子 AndAlso, OrElse が追加されています。
また、VB.NET で Option Strict On (厳格なTypeチェック) を適用すると、暗黙の型変換に依存するコードはすべてビルドエラーとなります。
すなわち、
× If rc Then
↓
○ If CBool(rc) Then または
○ If rc <> 0 Then
と記述しなければなりません。
※ 余談ですが、Option Strict On を適用すると、抽象Object型を使用した実行時バインディングができない、というデメリットもあります。
(この問題は、適切なプログラム設計により回避可能かもしれません。専門家のフォローを希望)
参考URL:http://fukkey.dyndns.org/pins/vb/030228/45930.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ワークシート内を検索 1 2022/12/19 23:46
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
SNMPトラップ情報をC#.netで作...
-
Cプログラムの解析(関数の呼び...
-
C言語のHP-UXからLinuxへのポ...
-
自動で施設の空きを通知するプ...
-
VBプログラムをEXCEL VBAに移植...
-
OSの役割について、簡単に解説...
-
ランチャーの作り方について教...
-
Timerイベントについて
-
UWSCをサーバー上で実行するには?
-
コンソールアプリでファイル選...
-
OSとCPUの関係について
-
AIなんて所詮人間のプログラ...
-
サーバーサイドのプログラム言...
-
Java言語を使ったP2Pのチャット...
-
i,j,k
-
stdio.hのバッファについて。
-
損害保険募集人 資格について
-
全豊田作業責任者
-
embedタグでFirefox右クリック禁止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
UNIX環境でのCプログラム上でC...
-
このプログラミング誰か教えて...
-
C言語のHP-UXからLinuxへのポ...
-
Ryzen 3700(無印)はWin11に対応...
-
VB.net エラーメッセージを英文...
-
SNMPトラップ情報をC#.netで作...
-
プログラムとは理系ですか文系...
-
現在プログラミングの研修中な...
-
C言語でSMTPを使ったプログ...
-
VBS:コンピュータ名を取得し、...
-
C/C++でチャットソフトを作りた...
-
OSとCPUの関係について
-
DLLってなに?
-
自動で施設の空きを通知するプ...
-
PHP+MySQLで家計簿を作りたい
-
どんなプログラムを自作しまし...
-
コンソールアプリでファイル選...
-
If … then の中の条件式と型に...
おすすめ情報