-6

これらの長い if - else/switch ステートメントが非常に長く、コードが読みにくくなっています。それで、それらを取り除く方法があるのだろうかと思っていましたか?たぶん、各条件にクラスを使用してから、一連の責任パターンを使用するようなものでしょうか?

どのようなアプローチをお勧めしますか?

サンプルコードは次のとおりです。

    if (  cc == LIB_DEFINED_CONSTANT_1  )
    {

        response = "-1";

        errorWindow->setText ( "The operation timed out.\nPlease try again later." );
        errorWindow->show (  );

    }   

    else if (  cc == LIB_DEFINED_CONSTANT_2  )
    {

        response = "-1";

        errorWindow->setText ( "Couldn't conect to the server.\nPlease try again later." );
        errorWindow->show (  );

    }

    else if (  cc == LIB_DEFINED_CONSTANT_3  )
    {

        response = "-1";

        errorWindow->setText ( "Access is denied.\nPlease contact our support team." );
        errorWindow->show (  );

    }

    else if (  cc == LIB_DEFINED_CONSTANT_4  )
    {

        response = "-1";

        errorWindow->setText ( "Credentials and varified\nPlease contact our support team." );
        errorWindow->show (  );

    }
    else if ....

ご覧のとおり、条件付きタグのほとんどのコードは、errorWindow のテキストを設定することを除いて、似たようなものです。

編集: 反対票を投じた理由についてコメントを残していただければ幸いです。

4

1 に答える 1

2

一般に、コードを小さな関数/メソッドに分割し、それぞれが正確に 1 つのことを行うようにする必要があります。非常に長い (数ページの) if/else ブロックがある場合は、おそらくコードをリファクタリングする必要があります

コードは次のように読むべきだと思います:

if (shouldIdoThing1()) 
{
  doThingOne(withThis, andThis, andThat);
}
else if (shouldIdoThing2())
{
  doTheSecondThing(withThisOnly);
} 
else
{
  doTheOtherThing(withSomethingElseEntirelyPerhaps);
}

そして、可能であれば、コードをそのように見せるようにしています。大規模なアプリケーションでは、何が行われたかを確認するためだけに複数のページをスクロールすることはelse、頭の中で本当に苦痛です。

于 2013-06-27T09:30:20.540 に答える