先日のコードレビューでこんな感じのコードを見つけました。
public void DoSomeTasks()
{
if (CheckSomeState()==true) return;
DoTaskOne();
if (CheckSomeState()==true) return;
DoTaskTwo();
if (CheckSomeState()==true) return;
DoTaskThree();
if (CheckSomeState()==true) return;
DoTaskFour();
}
タスクの数が増えると、コードのサイクロマティックな複雑さがさらに増し、私には適切ではないと感じます。
これを解決するために私が思いついた解決策は次のとおりです。
private void DoTasksWhile(Func<bool> condition, Action[] tasks)
{
foreach (var task in tasks)
{
if (condition.Invoke()==false) break;
task.Invoke();
}
}
このように使用
public void DoSomeTasks()
{
var tasks = new Action[] {
{()=DoTaskOne()},
{()=DoTaskTwo()},
{()=DoTaskThree()},
{()=DoTaskFour()}
}
DoTasksWhile(()=>CheckSomeState(), tasks);
}
コードを読みやすくするための提案はありますか?