我試圖讓下面的代碼可讀性和高性能。我想避免任何不必要的電話getFlagB()
,同時也不會重複任何事情。下面我寫了兩種方法,每種都滿足這些標準中的一種。可讀的條件邏輯沒有不必要的執行?
假設getFlagB()
不能以任何方式改變。有沒有辦法在C中同時滿足這兩個要求,而無需創建額外的標誌?
// Method 1 - doesn't repeat code blocks but calls getFlagB even when it may not need to
void foo(int flagA)
{
int flagB;
getFlagB(&flagB);
if(flagA & flagB)
{
// Code block 0
}
else
{
// Code block 1
}
}
// Method 2 - doesn't no extra call to getFlagB, but repeats code block 1
void foo(int flagA)
{
int flagB;
if(flagA)
{
getFlagB(&flagB);
if(flagB)
{
// Code block 0
}
else
{
// Code block 1
}
}
else
{
// Code block 1
}
}
重構所以getFlagB返回一個值,然後用'如果(FLAGA && getFlagB())' – John3136
從這樣一個問題: 「假設getFlagB()不能以任何方式改變」 –
將getFlagB換成另一個方法'int myGetFlagB(){int b; getFlagB(&b); return b;}' – John3136