2013/07/09

Visual Studio為什麼不會提醒我要加try/catch

最近使用Visual Studio 2010寫些C#的程式,有一點不太習慣的地方是,VS不會要求你那裡要加try/catch (用慣VS的人應該不會覺得不習慣啦,是我這種用過Java的人才這麼感覺吧)
這好處是可以忘了有exception這回事,就暢快的跟著happy path寫下去;可是,人生總是不會如此美好,該出錯的地方一定會出錯的
那開發者就很難去預想run-time時那裡會出錯,就算有心想去加try/catch,也不知道那些method會丟出exception,又會丟出那個exception class (除非去翻文件,可是,這不是IDE應該幫PG減輕負擔的地方嗎?)
結果,就加了一堆都是catch Exception的code

有Java開發經驗的人,應該會知道method後面會定義要丟那些exception,如:
public void foo() throws IOException, ParseException

在Eclipse, NetBeans等這些免費的tools裡寫程式,IDE總會提醒你那個method會丟出exception,你必須加try/catch或是在目前的method中加上throws。

一直在想,為什麼Java的工具可以做得到,Visual Studio卻沒這功能,而且VS經過這麼多代了,難道VS的users都不用這些功能?或是不抱怨VS沒有這樣的功能?
查了一下,確實還有些users在抱怨,可是...就是做不到

後來研讀了一下,推測了VS為什麼沒有這樣的功能 (對.NET我還不是很熟,所以有說錯敬請見諒,也請指教)

因為像在C#裡method的定義,並沒有像Java的throws的宣告
在Java的工具中要做到這樣的功能很容易,tool只要去查你叫用methods的宣告,就可以知到這些methods有沒有丟exceptions,丟怎樣的exceptions,然後再提醒PG要處理,但是.NET中method並沒有這樣的宣告,如果VS要做到這樣的結果,就必須去scan所有使用到的methods的內容,然後一層一層往上追上去,即使已經翻成MSIL的library也必須要去追

Java只要追你叫用到的那些methods的宣告;.NET則要追你叫用到的那些methods的內容,還有他的祖宗八代、親戚五十等等所有相關到的內容

這也可以體諒為什麼VS/.NET不提供這樣的功能了,實在是做不到 (應該說很難做到,如果要做,用VS寫程式應該會lag蠻嚴重的)

所以,用VS寫程式,就先當個happy PG吧
exception,等被丟出來再說吧

沒有留言: