2016-09-22 56 views
1

最後,我打算編寫開源項目,但我深感困惑。我知道在我的代碼中使用異常處理機制是一個好主意,但我所看到的大多數開源項目(即使是流行的項目)都不使用try ... catch和exception。爲什麼?如果我在開源代碼中使用它們會發生什麼壞事?開源代碼中的異常處理(try-catch)

+0

這些開源項目使用什麼替代try/catch? – jaco0646

+0

@ jaco0646他們只是返回值來標記錯誤 – Fresher

+0

@Fresher你指的是什麼語言?異常處理策略幾乎都是面向語言的。例如:Java社區非常相信檢查異常,在那裏.net人們認爲它是一種反模式。如果你提到大多數腳本語言,事情就會有很大的不同。 –

回答

1

但我看到的大部分開源項目(即使是流行的項目)都不使用try ... catch和exceptions。

用於開發框架的基本語言將極大地影響您的框架如何處理或應該處理錯誤條件的策略。不同的編程語言有不同的異常處理機制。 Java例如具有檢查的概念開發人員被迫處理或傳播給調用者的異常。另一方面C#不具備檢查例外的概念。很可能你所指的框架使用的語言本身沒有的概念,檢查了的例外。

舉個例子吧。假設你想構建一個讀取分隔文件並將它們加載到內存(對象)的框架。您根據程序員提供的文件名和路徑編寫一個負責讀取文件的圖層。在這種框架中一個非常常見的特殊情況是文件或路徑的名稱是無效的。如果您使用Java構建您的框架,那麼您可能會使用Java提供的文件讀取API之一來讀取該文件。 java throw中的大多數文件讀取API檢查了開發人員必須處理或傳播的異常(例如FileNotFoundException)。如果您的選擇語言本身強制您使用異常,那麼您肯定會遇到某種情況,您不得不使用該語言提供的異常框架。

爲什麼?如果我在開源代碼中使用它們會發生什麼壞事?

異常處理的真正問題在於正確使用此功能(特別是在具有檢查異常概念的語言中)。沒有經驗或懶惰的程序員可能會通過將例外直接傳遞到應用程序的起點來簡單地濫用此功能;只允許運行時環境處理異常。下面的代碼片段演示了一個這樣的濫用:

public static String loadData(String fileName)throws FileNotFoundException { 
    String resource = ResourceManager.getResource(fileName); 
    //code to read the file 
} 

public static boolean containsText(String fileName,String text)throws FileNotFoundException { 
    String contents = loadData(fileName); 
    if(contents.contains(text)) { 
     return truel 
    } 
    return false; 
} 

public static void main(String []args)throws FileNotFoundException { 
    containsText("/home/abc.txt","Account Number"); 
} 

另一種方式濫用此功能將是建立一個有太多的checked異常被拋向四周的API。這將要求API的用戶編寫比實際業務/應用程序邏輯更多的異常處理代碼。