2012-02-05 58 views
0
public void ScoreFirstBall(int pinsKnockedDown) { 
    if (IsStrike(Frame, pinsKnockedDown)) { 
    Score = "X"; 
    ScoreMessage = "Good Job"; 
    } else if (IsGutterBall(pinsKnockedDown)) { 
    Score = "0"; 
    ScoreMessage = "You'll do better next time"; 
    } 
    PinsTotal += pinsKnockedDown; 
} 

public void ScoreSecondBall(int pinsKnockedDown) { 
    PinsTotal += pinsKnockedDown; 
} 

問題:觸發功能時,另一個函數被調用

  1. 在這種情況下,我想PinsTotal += pinsKnockedDown被稱爲每次ScoreSecondBall(...)ScoreFirstBall(...)運行。所以我想把它放在一個函數中(將來可能擴展到很多行)。

  2. 這樣做效率高嗎?因爲我們有一個線程來監聽函數的調用。

感謝您閱讀我的問題,如果現在還不清楚,只是評論,我會解決它:)

+0

你的第二個問題是什麼意思? – 2012-02-05 09:02:30

回答

1

您可以重構代碼只使用一個ScoreBall()函數,它接受一個額外的參數:

public void ScoreBall(int pinsKnockedDown, bool first) 
{ 
    if (first) { 
     if (IsStrike(Frame, pinsKnockedDown)) { 
      Score = "X"; 
      ScoreMessage = "Good Job"; 
     } else if (IsGutterBall(pinsKnockedDown)) { 
      Score = "0"; 
      ScoreMessage = "You'll do better next time"; 
     } 
    } 
    PinsTotal += pinsKnockedDown; 
} 

然後直接調用它,或者,如果你想保持現有的功能,讓他們委託給共同執行:

public void ScoreFirstBall(int pinsKnockedDown) 
{ 
    ScoreBall(pinsKnockedDown, true); 
} 

public void ScoreSecondBall(int pinsKnockedDown) 
{ 
    ScoreBall(pinsKnockedDown, false); 
} 

這樣,您就不必擔心投入的PinsTotal的增量到它自己的功能。

至於效率,函數調用確實有成本,但與代碼中可能存在的其他瓶頸相比,它通常可以忽略不計。

+1

謝謝,你的回答直接回答我的問題:) – nXqd 2012-02-05 09:15:33

1

我從你的問題的理解,是的,你可以把代碼PinsTotal += pinsKnockedDown在它自己的方法。調用一段代碼或多於一個地方共有的邏輯時,這是很常見的做法。它還允許更改邏輯的易維護性,因爲調用它的代碼將保持不變(假定更改在方法內部)。

相關問題