0

次の 2 つの switch/case ステートメントのより良い方法は何ですか?

これを行う簡単な方法 (少ないコード) はありますか?

switch (myValue)
{
    case 1:
    {
        methodFor1();

        break;
    }
    case 2:
    case 3:
    {
        methodFor2or3();

        if (myValue == 2)
                methodFor2();

        if (myValue == 3)
                methodFor3();

        break;
    }
}

...or...

switch (myValue)
{
    case 1:
    {
        methodFor1();

        break;
    }
    case 2:
    case 3:
    {
        methodFor2or3();

        switch (myValue)
        {
            case 2:
            {
                methodFor2();

                break;
            }
            case 3:
            {
                methodFor3();

                break;
            }
        }

        break;
    }
}
4

8 に答える 8

8
switch (myValue)
{
  case 1:
    methodFor1();
    break;
  case 2:
    methodFor2or3();
    methodFor2();
    break;
  case 3:
    methodFor2or3();
    methodFor3();
    break;
}

methodFor2or3() 一度繰り返すのを避けるために、なぜすべての面倒なのですか?

于 2009-01-30T16:43:25.033 に答える
3

もう1つの選択肢:

switch (myValue)
{
    case 1:
    {
        methodFor1();
        break;
    }
    case 2:
    {
        methodFor2or3();
        methodFor2();
        break;
    }
    case 3:
    {
        methodFor2or3();
        methodFor3();
        break;
    }
}
于 2009-01-30T16:42:06.753 に答える
1

ステートメントのプログラミングではswitch、各ケースに最大で 1 行のコード + a を含めることを目指していbreak;ます。これは、switchすぐに大きく複雑になる可能性があり、私の脳は複雑になるのが苦手だからです。

したがって、あなたの場合、私は次のように書きます。

switch (myValue)
{
    case 1:
    {
        methodFor1();
        break;
    }
    case 2:
    {
        methodFor2();
        break;
    }
    case 3:
    {
        methodFor3();
        break;
    }
}

そしてmethodFor2methodFor3各呼び出しを行いますmethodFor2or3

于 2009-01-30T18:28:22.357 に答える
0

2 つのケースに共通する (かなり単純な) 行が 1 つしかない場合 (例の関数呼び出しのように)、読みやすくするためにその行を 2 倍にすることを好みます。そうでなければ、それは好みの問題です。さまざまなレベルを混同しないように、ステートメントif内の条件を好む傾向があります。case

于 2009-01-30T16:45:16.060 に答える
0

あなたが与えた例のケースが不自然であり、他の方法でよりよく書かれていることを知っていると仮定して、私は答えています。スイッチをネストするか、スイッチ内で if-else を使用するのが最善かを知りたい場合は、好みと個々の状況に完全に依存します。

私の意見では、あなたのブロックがスイッチの中にあるという事実は何の違いもありません。ロジックがスイッチによってより適切に処理される場合は、(ネストされているかどうかに関係なく) スイッチを使用します。if-else の方が適している場合は、それを使用してください。

于 2009-01-30T17:12:39.000 に答える
0

次のようなものはどうですか:

var method:String = "methodFor" + String(value);
this[method]();
if (value == 3) methodFor2or3();

より単純なコードが必要な場合は、or3 呼び出しを分割することを考えるかもしれません。

switch (value) {
    case 1: methodFor1(); break;
    case 2: methodFor2(); break;
    case 3: methodFor3(); break;
}
if (value == 2 || value == 3) methodFor2or3();
于 2009-01-30T16:48:39.110 に答える