文字列への暗黙的な型変換( VB9 編)
- string型の暗黙の型変換 (おぎわら @Blog (Hatena 編 ) )
他の言語から来るとはまりそうな話ですね。
まぁ、文字列連結の "+" (結合演算子)の動きを考えると、これでいいのかも、とは思うのですが、何とも気持ちの悪い動きです。
……で、ふとなく気になったので、似た様な事を VB 9.0 でも試してみました。
(追記)以下の話は Option Strict Off の場合についてです。 On にした場合は s1 と s4 以外はコンパイルエラーとなります。 s1 と s4 については実行結果は変わりません。
Dim s1 As String = 1 + 2 + 3 + 4.4 + 5.5 & "" Console.WriteLine(s1) Dim s2 As String = 1 + 2 + "3" + 4.4 + 5.5 & "" Console.WriteLine(s2) Dim s3 As String = "1" + 2 + 3 + 4.4 + 5.5 Console.WriteLine(s3)
あえて全部 "+" でつなげました。( s1 と s2 は、諸事情により最後だけ "&" で連結)
これの実行結果は、以下。
15.9 15.9 15.9
VB の場合、数字文字列を "+" でつなぐと暗黙的に数値変換されるんですね。(この仕様を忘れて、結果に軽く驚いたのは秘密です)
ちなみに、これをちょっと変えてあげると違う結果が返ってきます。
Dim s4 As String = 1 + 2 & "3" & 4.4 + 5.5 Console.WriteLine(s4) Dim s5 As String = "1" & 2 + 3 + 4.4 + 5.5 Console.WriteLine(s5)
数字文字列の前後の結合演算子を "+" から "&" に変更してみました。
こうした場合、実行結果は以下の様になります。
339.9 114.9
どうやら VB では "&" の前後を計算した上で文字連結している様です。
VB の "&" は評価順が低いって事なのかな?
もうひとつ、おまけ。
Dim s6 As String = 1 + 2 & "3" + 4.4 + 5.5 Console.WriteLine(s6) Dim s7 As String = 1 + 2 + "3" & 4.4 + 5.5 Console.WriteLine(s7)
左右の結合演算子を片方だけ "&" にしてみました。
実行結果は以下。
312.9 69.9
この結果を見る限り、 "&" は最後に評価されている様ですね。( C# 脳で見るともう何がなんだか。。。)