VB.NETでは、Returnの後の実行されない処理書いても、コンパイルエラーにならない。
VB.NETの場合
ソース
Imports System Class Test Public Shared Sub Main Hoge() End Sub Public Shared Function Hoge As Integer Return 0 Console.WriteLine("abc") End Function End Class
一方Javaの場合
ソース
public class Test { public static void main(String[] args) { Hoge(); } public static int Hoge() { return 0; System.out.println("abc"); } }
コンパイル結果
>javac -version javac 1.6.0_07 >javac Test.java Test.java:8: この文に制御が移ることはありません。 System.out.println("abc"); ^ Test.java:9: return 文が指定されていません。 } ^ エラー 2 個 >
rubyの場合
ソース
class Test def Hoge return 0; puts("abc"); end end Test.new.Hoge();
実行結果
taka@ubuntu-vm:~$ ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux] taka@ubuntu-vm:~$ ruby -c test.rb Syntax OK taka@ubuntu-vm:~$ ruby test.rb taka@ubuntu-vm:~$
エラーが出ず。
JavaScriptの場合
ソース
<script> function Hoge() { return 0; alert("abc"); } Hoge(); </script>
実行結果 on Chrome 13.0.782.24 dev-m
エラーが出ず。
結論
.NETはJavaのパクリなので、動きが違うと違和感ありますね。
警告でも出しといてくれれば、安心だけど、
まあ、そんなショボいミスは普通はしないかな。