2013-11-15 39 views
1

今天我得到了Dart的介紹。在玩遊戲的時候,出現了一些問題。後來我發現它沒什麼,只是我忘了把return語句放在一個函數中,所以null被設置爲應該從該函數獲取值的變量。爲什麼「Missing return statement」不在語言中處理?

在那個時候,我想,在Java中,它將首先被誤認爲是錯誤。爲什麼C/C++或新的Dart不添加此功能?此功能是否會大幅減慢代碼的速度?或者這背後還有其他技術原因?

+1

什麼?如果您忘記從函數返回,每個現代C/C++編譯器都會觸發(至少)一個警告。例如'gcc -Wall -fsyntax-only -x C++ - <<<'int f(){}''=>':1:10:warning:函數中沒有返回語句返回非void [-Wreturn-type] ' – peppe

回答

1

每個方法都返回一個值,如果沒有返回,則返回null

然而,看起來這樣的一些增強可能在未來完成。見issue 73 : Missing return statement does not trigger warning or errorissue 13373 : Can get the editor to warn when there is no explicit return for a function returning a type

+0

嗯,我當然同意。從第一個鏈接看,他們看起來像(達特)已經考慮到了這一點。 但我的觀點其實是,Java有這個功能,爲什麼其他語言沒有它?很高興看到Dart很快就會擁有這個功能。 – Fallen

+0

Java是一種編譯的靜態類型語言。編譯器不可能生成忘記返回值的代碼。 Dart是動態類型語言,並且具有基於源代碼的VM。所以你可以運行你的代碼,甚至沒有類型檢查它。 Dart的靜態類型分析器對Java中會出現錯誤的許多事情持樂觀態度。我個人希望看到它對這個具體問題也更加嚴格。明星那個bug;) –