0

これは、 conditional に関するプログラミングの基本的な質問ですif。次のようなものがあるとしましょう:

if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3
}

if(a == 1)
{
   var total = $myvar + 1;
   // do stuff if the value of a is 1
}

if(a == 2 || a == 3)
{
   var total = $myvar + 1;
   // do stuff if the value of a is either 2 or 3
}

上記のコードで何をしようとしているのかは明らかです。ご覧のとおり、ここにはいくつかの一般的な条件があります (たとえば、a == 1は 3 つの条件のうち 2 つに共通しています)。$myvarまた、他の 2 つの条件でのみ宣言し、a == 1 || a == 2 || a == 3それにアクセスする変数があることに注意してください。これを行う別の(おそらくよりクリーンな)方法を考えられる人はいますか?

4

6 に答える 6

4
if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3
  if(a == 1)
  {
     var total = $myvar + 1;
     // do stuff if the value of a is 1
  }
  else
  {
     var total = $myvar + 1;
     // do stuff if the value of a is either 2 or 3
  }

}

またはさらに良い

if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3
   var total = $myvar + 1;

  if(a == 1)
  {
     // do stuff if the value of a is 1
  }
  else
  {
     // do stuff if the value of a is either 2 or 3
  }

}

2 つの違いはわずかであり、コードをより明確にする場合は最初のものを使用できます。また、一部の言語では、変数が宣言されている場所に応じて変数のスコープが変更されるため、どちらを使用するかに影響を与える可能性があります。

于 2012-11-14T18:16:08.087 に答える
2

特定の要件を知らなくても、それを改善するためにあなたがすることはそれほどひどくはありません。

要件に応じて:

switchステートメントを試すことができます

switch(a)
{
    case 1:
    case 2:
    case 3:
        //logic for if a is 1, 2, or 3
    break;
    default:
        //if a is something else
    break;
}

if(a == 2 || a == 3)

に変更することができます

else if(a == 2 || a == 3)

しかし、これはほとんど表面的なものであり、実行時への影響は最小限です。

于 2012-11-14T18:18:01.550 に答える
0
var $myvar=0,total=0;
switch(a){
    case 1:
    case 2:
    case 3:
        $myvar = 10;
    case 1:
        total =$myvar + 1;
        break;
    case 2:
    case 3:
        total = $myvar + 1;
        break;
}
于 2012-11-14T18:20:17.257 に答える
0
switch (a){
    case 1:
         do stuff;
         //DONOTBREAK HERE
    case 2:
    case 3:
         if(a== 2 || a == 3){
              //do stuff exclusive to 2 and 3
         }
         //do stuff universal to 1,2,3
         break;
    default:
       //failing case
}
于 2012-11-14T18:21:40.180 に答える
0

逆方向に実行します:

if (a < 1 || a > 3)
{ 
   return;
}
else
{
   var $myvar = 10;
   if (a == 1)
   {
      var total = $myvar + 1;
      // do a == 1 stuff 
   }
   else
   {
      total = $myvar + 1;
      // do a == 2 or a == 3 stuff
   }
}
于 2012-11-14T18:30:43.420 に答える
0

次のようなことを試すことができます。

if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3

   if(a == 1)
    {
       var total = $myvar + 1;
       // do stuff if the value of a is 1
    }

    if(a == 2 || a == 3)
    {
       var total = $myvar + 1;
       // do stuff if the value of a is either 2 or 3
    }
}

このようにして、変数$myvarは外側の if ブロック内のすべてのものにアクセスできます。PHP のスコープ ルールについては完全にはわかりませんが、c++ (この言語が元々タグ付けされていたもの) では$myvar、if ブロックの外ではアクセスできません。

ただし、Javascript では、そのスコープ ルールにより、if ブロックの外で$myvar 引き続きアクセスできます。

于 2012-11-14T18:16:56.570 に答える