2010-09-20 55 views
0

這可能是一個有點愚蠢的問題,但它已被竊聽我,所以在這裏不用異常和取消

我知道,正常建議是例外僅僅意在特殊情況下可以使用,但我也讀人們崇尚當方法未能履行其合同

取消我看來,坐了一下這兩種情況下

沒有例外之間的灰色地帶,如果你的類有很多的取消行動代碼的使用異常最終返回檢查各地的錯誤代碼

取消在這方面可以被視爲例外嗎?

回答

0

我不會在其字面定義中使用「例外」。你可以選擇的是將取消作爲一個用戶驅動的值來捕獲,一個布爾值可能表示用戶已經取消了一個動作,並且使用這個布爾值來不執行詳盡的錯誤條件檢查。

2

異常對於需要非本地處理的罕見情況是最有效的。這聽起來像適用於此。所以這純粹是一個風格問題。非局部控制轉移可能更難以考慮,但也可能意味着更短的代碼。我會根據這是什麼語言以及現有代碼中有多少已被設計爲例外來做出決定。如果您已經有異常安全的清理代碼,請繼續使用它們。

0

這取決於您使用的語言。 在PHP例如它是一種常見的做法,拋出一個異常,並抓住它來中斷例如一個循環或遞歸,在一個對象中調用它不足以跳轉到父函數。 考慮這個例子:

<?php 
class hideAndSeekWithOnlyOneOtherPlayer { 
    public function seek() { 
     foreach($rooms as $room) { 
      if($this->checkRoom($room)) { 
       $this->shoutThatIFoundYou(); 
       return; 
      } 
     } 
     $this->shoutThatICantFindYou(); 
    } 
    function checkRoom($room) { 
     $hideouts = $this->getPossibleHideoutsForRoom($room); 
     return $this->checkHideouts($hideouts); 
    } 
    function checkHideouts($hideouts) { 
     foreach($hideouts as $hideout) { 
      return $this->checkHideout($hideout); 

     } 
     return false; 
    } 
    function checkHideout($hideout) { 
     $this->walkToHideout(); 
     return $this->seeIfPersonIsInsideHideout(); 
    } 
} 
?> 

其討厭總是從一個函數傳遞布爾值到另一個,而不是你可以隨便扔在seeIfPersonIsInsideHideout(一excemption)和返回值不關心了! maby這是一個不好的例子,因爲當你有多個可能發生的情況時它真的變得很重要。那麼你必須低迴一個常量或字符串或整數,你檢查一個case語句等 它更好(更容易編碼和undestand,更少的錯誤潛力)來定義你自己的異常類,然後!