一個函數只有一個出口


出口就是函數退出的地方,一個return也算是一個出口。如果一個函數有多個出口可能擾亂讀者的思考

int max_num(int a, int b)
{
     return a < b ? b : a;       
}

這是一個出口,再看個兩個出口的

int max_num(int a, int b)
{
    if (a < b)
    {
        return b;
    }
    else
    {
        return b;
    }
}

看起來似乎還好,沒影響到閱讀。再看個復雜點的

bool update_user_amount (DBSession& db_session, int modify_amount)
{
  if (db_session.is_valid())
  {
     return false;
  }

if (!db_sesson.start_transaction()) { return false; } if (db_session.query("SELECT amount FROM user WHERE ... FOR UPDATE")) { DBRow db_row = db_session.fetch_row(); if (!db_row.is_null()) { db_session.rollback(); return false; } int balance_amount = 0; if (!db_row.get_value("amount", balance_amount)) { db_session.rollback(); return false; } balance_amount += modify_amount; if (balance_amount < 0) { db_session.rollback(); return false; } if (!db_session("UPDATE amount....")) { db_session.rollback(); return false; } db_session.commit(); return true;
  }
  else
  {
     db_session.rollback();
     return false;
  } }

 這段代碼是從實際項目里摘出來簡化后的,雖然是簡化的,但是看起來依然不太友好,如果后續要修改的話,非常有可能忽略事物的處理,比如直接return了但是沒有提交或回滾事物。當一個函數有數百行長時,再加上if else嵌套過深,如果隨意return將給閱讀帶來極大的難度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM