3 回答

TA貢獻1829條經驗 獲得超13個贊
有不同的思想流派,這在很大程度上取決于個人喜好。
一個是如果只有一個出口點,那么它會減少混亂-您在方法中只有一條路徑,并且知道在哪里尋找出口。在不利的一面,如果您使用縮進來表示嵌套,則代碼最終將大量縮進到右側,并且很難遵循所有嵌套作用域。
另一個是您可以檢查先決條件并在方法開始時提早退出,這樣您就可以在方法主體中知道某些條件是正確的,而整個方法主體都不會向右縮進5英里。通常,這可以最大程度地減少您需要擔心的作用域數量,從而使代碼易于遵循。
第三點是您可以隨心所欲地退出。在過去,這曾經使人更加困惑,但是現在我們有了語法著色的編輯器和編譯器可以檢測無法訪問的代碼,因此處理起來要容易得多。
我正好在中間營地。強制執行單個出口點是毫無意義甚至適得其反的限制,恕我直言,盡管整個方法中的隨機出口有時會導致混亂的邏輯難以遵循,在邏輯上很難確定給定的代碼是否會執行。但是“控制”您的方法可以顯著簡化方法的主體。

TA貢獻1877條經驗 獲得超6個贊
我的一般建議是,在可行的情況下,return語句應位于具有任何副作用的第一個代碼之前,或位于具有任何副作用的最后一個代碼之后。我會考慮類似:
if(!argument)//檢查是否為非null
返回ERR_NULL_ARGUMENT;
...處理非空參數
如果(確定)
返回0;
其他
返回ERR_NOT_OK;
比:
int return_value;
if(argument)//非null
{
..處理非空參數
..適當設置結果
}
其他
結果= ERR_NULL_ARGUMENT;
返回結果;
如果某個條件會阻止某個功能執行任何操作,那么我寧愿在該功能可以執行任何操作的位置上方的某個位置早點退出該功能。但是,一旦函數執行了帶有副作用的操作,我更愿意從最底層開始,以明確必須處理所有的副作用。

TA貢獻1744條經驗 獲得超4個贊
單一入口和出口點是結構化編程與分步Spaghetti編碼的原始概念。人們認為,多個出口點函數需要更多代碼,因為您必須適當清理分配給變量的內存空間。考慮一種情況,其中函數分配變量(資源),并且過早地退出該函數并且沒有適當的清理會導致資源泄漏。另外,在每個出口之前構造清理將創建大量冗余代碼。
- 3 回答
- 0 關注
- 750 瀏覽
添加回答
舉報