我有一個大型的3D數據陣列,我將隨機讀取和寫入數據。按照設計,這些操作中的大約5%將超出此數組的範圍,並且將以不同的方式處理。這是一個適合使用try/catch塊的地方嗎?否則,我需要6個單獨的'if'語句來檢查數組邊界的地址。如果語句與Try/Catch檢查數組邊界
也許我試圖在這裏進行微觀優化,但這些操作可能每秒發生數萬次。另外,它會使代碼略爲乾淨。我在這裏使用C#,但我想這是一個與語言無關的問題。
我有一個大型的3D數據陣列,我將隨機讀取和寫入數據。按照設計,這些操作中的大約5%將超出此數組的範圍,並且將以不同的方式處理。這是一個適合使用try/catch塊的地方嗎?否則,我需要6個單獨的'if'語句來檢查數組邊界的地址。如果語句與Try/Catch檢查數組邊界
也許我試圖在這裏進行微觀優化,但這些操作可能每秒發生數萬次。另外,它會使代碼略爲乾淨。我在這裏使用C#,但我想這是一個與語言無關的問題。
有趣的是,你的問題一方面是而不是語言獨立。在諸如C,Java,C++,C#等語言中,人們更喜歡「LBYL」(Look Before You Leap)模式;而像python這樣的語言則嚴重強調「EAFP」(它比容許更容易提出寬恕)。
含義:在Python中,你正在使用try/catch 很多(甚至「for counting for loop」被實現爲try/catch);而在C#中,您更願意使用if/else來代替。
這些約定非常重要 - 大多數Cx語言程序員只是假設您不使用try/catch來建模控制流。
但回到你的核心要求:去if/else。正如你指出的那樣,表現很好可能是一個問題;您只需要避免more expensive try/catch解決方案。
而且如上所述;作爲這樣做的好副作用,你的代碼將會是「更主流」;因此你的代碼的讀者不會每分鐘給你很多WTFs。
你可能想看看http://stackoverflow.com/questions/891217/how-expensive-are-exceptions-in-c –