teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

回答の追記

2019/10/15 14:41

投稿

tama_yn0815
tama_yn0815

スコア143

answer CHANGED
@@ -21,5 +21,17 @@
21
21
 
22
22
  日本語が変で申し訳ありません。
23
23
 
24
+ 【追記】
25
+ 何故この様な型キャストが起きるのか?
26
+ こちらについては、このIF演算子の使い方が答えとなります。
27
+ この演算子は、厳密なOR代入です。
28
+ 第一引数を評価して、真なら第二引数を、偽なら第三引数を、
29
+ それぞれ評価してから、推論の型で返却し左辺(変数)へ代入します。
30
+ 代入する値の型が変数の許容外の場合、型の不一致エラーが起こりますので、
31
+ それを起こさない為に渡された引数の型から返すべき値の型を推論します。
32
+
33
+ ※ショートサーキット評価の場合、疎漏なOR代入の為に実行時点で、
34
+  例外スローか発生しますので、下記の参考リンクの様にエラー文が有ります。
35
+
24
36
  [本家リファレンス](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/if-operator)
25
37
  [参考リンク](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/misc/bc33110)

2

回答の修正

2019/10/15 14:41

投稿

tama_yn0815
tama_yn0815

スコア143

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  本家サイトにも記載がありますが、
2
2
  引数3(Nothing)は、評価されております。
3
3
 
4
- そのため、評価されて、引数3の値が戻ります。
4
+ そのため、評価された値の引数3の値が戻ります。
5
5
 
6
6
  1:IF演算子
7
7
    2回目は、IF(Boolean型, Date型, Nothing);
@@ -16,5 +16,10 @@
16
16
  つまるところ、型の一致をさせる処理が動くため、演算子と制御構文で違いがあるです。
17
17
  同じ挙動にする場合、IF演算子で行う処理とIF制御構文で行う処理を厳密に合わせる必要が発生します。
18
18
 
19
+ 下記に参考リンクを挙げておりますが、
20
+ 何故か?の理由は、ショートサーキット評価を行う際に、型を一致させるためです。
21
+
22
+ 日本語が変で申し訳ありません。
23
+
19
24
  [本家リファレンス](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/if-operator)
20
25
  [参考リンク](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/misc/bc33110)

1

回答の修正

2019/10/15 10:09

投稿

tama_yn0815
tama_yn0815

スコア143

answer CHANGED
@@ -1,13 +1,20 @@
1
1
  本家サイトにも記載がありますが、
2
2
  引数3(Nothing)は、評価されております。
3
3
 
4
- そのため、評価されて、引数3の値が許容されないため、元の値が戻ります。
4
+ そのため、評価されて、引数3の値が戻ります。
5
5
 
6
+ 1:IF演算子
6
- 制御構文IFとIF関数は、別物ですよ。
7
+   2回目は、IF(Boolean型, Date型, Nothing);
7
- 同じ扱いをするとは可能すが制約がいくつかあります。
8
+   の関数渡さた第二引数と第三引数型を合わせます。(これが評価です。)
8
- 今回場合、Datenull許容型ではないためNothingを代入できない判断たため、
9
+   関数実行内部で変換により、NothingをDate型のNothing(Date型の規定値として)返します。
9
- 元々変数bに入っていた値がそのまま返されております。
10
10
 
11
+ 2:IF制御構文
12
+   Nothing(null)を代入しています。
11
- 気になりましたら、関数の戻り値検証されることをお勧めします
13
+   ※変dはnull許容型なで、Nothing(null)が代入されています。
12
14
 
15
+ 今回、ご質問の件ですが、
16
+ つまるところ、型の一致をさせる処理が動くため、演算子と制御構文で違いがあるです。
17
+ 同じ挙動にする場合、IF演算子で行う処理とIF制御構文で行う処理を厳密に合わせる必要が発生します。
18
+
13
- [本家リファレンス](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/if-operator)
19
+ [本家リファレンス](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/if-operator)
20
+ [参考リンク](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/misc/bc33110)