If文条件式なしの場合の処理

タグの編集
投稿者 後藤  (学生) 投稿日時 2022/12/9 10:52:06
初歩的な質問で申し訳ないのですが、Ifの条件式が無い場合の処理について教えていただきたいです。
以下のソースでDateCheck関数でFalseを返して、その場合If文に入らないと思っていたのですがIf文内に処理が通っています。
If文のデフォルト設定見たいので設定できるのか、vb.netの仕様なのか教えていただきたいです。
よろしくお願いします。

If err_flg = DateCheck(sData, Item) Then
  err_cnt += 1
End If
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/12/9 11:13:00
質問文にある 『Ifの条件式が無い場合』の意味が理解できませんでした。

VB の If 文は、「Boolean 型」または「Boolean? 型」のいずれかを受け取りますが、
条件式が False として判定されたときの話をしておられますか?

※Option Strict Off の場合は、上記以外の型も渡せることがありますが、
 その場合、Boolean 型への暗黙変換が発生します。


> DateCheck関数でFalseを返して、その場合If文に入らないと思っていたのですが
単純に、変数 err_flg の値も False だったということはないでしょうか?
型の間違いも考慮して、「Option Strict On」にして試してみるのも良いでしょう。


> If文内に処理が通っています。
第三者がコピー & ペーストするだけで現象を再現可能な、
最低限量のソースコードを提示できますか?

現状だと、DateCheck の実装がどうなっているのか分からないですし、
sData , Item , err_flg , err_cnt の各変数の宣言と、それぞれの実際の値も不明なので…。
投稿者 後藤  (学生) 投稿日時 2022/12/9 11:36:49
>質問文にある 『Ifの条件式が無い場合』の意味が理解できませんでした。
  VB の If 文は、「Boolean 型」または「Boolean? 型」のいずれかを受け取りますが、
  条件式が False として判定されたときの話をしておられますか?

  ※Option Strict Off の場合は、上記以外の型も渡せることがありますが、
  その場合、Boolean 型への暗黙変換が発生します。

質問の意図としましては、err_flgの宣言時に値を何も入れていないと持っていて、DateCheckの戻り値のFalseがerr_flgに渡され、FalseなのになぜIf文内に入っているのかということをお聞きしたかったです。
説明不足で申し訳ございません。

>単純に、変数 err_flg の値も False だったということはないでしょうか?
  型の間違いも考慮して、「Option Strict On」にして試してみるのも良いでしょう。

まさに、その通りでした。
確認不足でした。
こんな稚拙な質問にお答えいただき、ありがとうございました。
投稿者 shu  (社会人) 投稿日時 2022/12/9 20:15:17
> DateCheckの戻り値のFalseがerr_flgに渡され
VB.NETではこのような動作はしません。


提示されたコードでは
> If err_flg = DateCheck(sData, Item) Then

これより前にerr_flgに値が設定されていて、DateCheckの戻り値と比較する
という処理になります。err_flgに何も設定してないと暗黙の初期化として
falseになるのでDateCheckの戻りがfalseなら
false と falseは等しいのでThenの中の処理が行われます。
DateCheckの結果がtrueであれば
false と trueは等しくないのでThenの中の処理は行われません。