我很好奇,爲什麼雨燕語言的工程師們決定去與此語法:Swift 2.0中的異常。爲什麼'?
do {
let x = try statement that throws
try a void statement that throws
} catch {
}
VS,這似乎是做同樣的更爲傳統的try-catch語法。除了Swift的情況,我們需要爲引發異常的每行輸入try。
我很好奇,爲什麼雨燕語言的工程師們決定去與此語法:Swift 2.0中的異常。爲什麼'?
do {
let x = try statement that throws
try a void statement that throws
} catch {
}
VS,這似乎是做同樣的更爲傳統的try-catch語法。除了Swift的情況,我們需要爲引發異常的每行輸入try。
他們想用try
來調出每個可能拋出的特定表達式。我想這是因爲一個關於異常的常見抱怨是,它們是'看不見的gotos',用戶在不去查看他們正在使用的每個函數的定義的情況下都無法分辨將拋出什麼。每個投擲函數調用需要try
,消除了這個問題。
我個人並不認爲'隱形gotos'是一個有效的投訴。遠離非結構化(如goto
),異常使錯誤處理結構化程度高。而且,如果你正確使用異常,你幾乎不需要一眼就能知道哪些函數拋出。有關更多信息,請參閱http://exceptionsafecode.com,其中討論正確使用例外情況。
鑑於他們希望try
是一個顯式調用函數調用的函數,所以他們可能不希望將其重複用於傳統的try
-block語法。
他們可能也只是不使用任何關鍵字:
{
let x = try foo()
} catch {
// ...
}
他們還使用do
引進任意嵌套範圍:
do {
let x = foo()
}
其他語言已經使用了括號,沒有任何關鍵字此。大概他們覺得有一個關鍵詞使語法更容易閱讀或解析或什麼的。