どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 890

 
evillive:

こんな感じです。


ありがとうございます。でも、ちょっと違うんです。あるマジシャンのクロージング条件がいくつかあって、その逆を望んでいるんですね。

と思いついたのです。

void CritCloseBuy()
   {
    if (OrderSelect(Ord, SELECT_BY_POS, MODE_TRADES)==true)
    {
      if ((OrderMagicNumber()==10011&&10033)&&(...условия1...)
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }
           if ((OrderMagicNumber()==10022&&10044&&10066)&&(...новые условия...))
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }           
          }
         }
うまくいくのか?あるいは、何がいけないのでしょうか?
 
rapid_minus:


ありがとうございます。でも、それはちょっと必要ないですね。1人のマジシャンに対して、いくつかのクロージング条件がありますが、その逆が必要なんですね。

こんな風に思いつきました。

うまくいくのか?あるいは、何がいけないのでしょうか?

それは...なんというか、繊細というか...。

コードが1人のマジシャンのためのものなのに、じゃあ何のためのスイッチ なんだ?

でも、ifhesでもいいんですけど、コンディションを考えないと、今あるものは本来の姿ではないんです。

例えば

if ((OrderMagicNumber()==10011&&10033)&&(...)

は、コンパイル時にエラーにならないのでしょうか?

 
evillive:

これは...なんというか、優しいというか...。

1人のマジシャンのためのコードなのに、じゃあ何のためのスイッチなんだ?

私はこのスイッチを理解していないのかもしれませんが、その表現では、1人のマジシャンがいて、いくつかのバリエーションある閉鎖条件と比較されるのです。

ZS: 続編を拝見しました。コードが完成していないので、まだコンパイルしていません。数値はAND演算で列挙できない?

では、どうすればいいのか?各マジシャンに繰り返し?

ZZZY:実は、ANDではなくORなんです。

 
rapid_minus:

では、どうすればいいのでしょうか?すべてのウィザードに繰り返すのか?

そうですね。


また、スイッチについては、やはり入門書を読むべきで、そこでは逆に、任意の数のバリアントを処理します(ケース0:...、ケース1:...、ケースN:...、ここで番号=マジシャンの値)。例で書くのが面倒だったので、2つのマジシャンとデフォルトのバリアントしか書く時間がありませんでした ;)

 
evillive:
ああ

結局、各マジシャンのORを書き出す必要はないのでは?
 
rapid_minus:

マジシャンごとにORを書き出す必要はないんじゃないですか?
私たちは、フェディア、私たちは(C)べきである。
 
evillive:

そうですね。


そして、やはりスイッチについての入門書を読むと、そこでは逆に、任意の数のバリアントが処理されます(ケース0:...、ケース1:...、ケースN:...、ここで番号=マジシャンの値です)。例で書くのが面倒だったので、2つのマジシャンとデフォルトのオプションしか書く余裕がありませんでした ;)

スイッチの説明ありがとうございました。誤解していた。
 

それなのに、スイッチではifと同じように、魔導師が変わっても同じ終了条件の繰り返しになるんですね。

問題は、どちらのバリエーションがより多くのビットを食べることができるかということです。

 
rapid_minus:

それなのに、スイッチではifと同じように、魔導師が変わっても同じ終了条件の繰り返しになるんですね。

問題は、どちらのバリエーションがより多くのビットを食べることができるかということです。

私は何かを見逃していたのでしょうか。すでにコードを最適化しているのでしょうか。
 
rapid_minus:

それなのに、スイッチではifと同じように、魔導師が変わっても同じ終了条件の繰り返しになるんですね。

問題は、どちらのバリエーションがより多くのビットを食べることができるかということです。

これは if() と同じ分岐で、見た目がすっきりしているだけで、3つ以上の整数の単一選択がある場合はコーディングが簡単になります。選択肢が2つしかない場合、あるいは数値以外の式が比較される場合は、if()のみとなります。また、if()では複数のオプションを組み合わせることができますが(if( option1 && option2 || option3 ) {action;} )、switchは直接使うことができず、一度に1つずつしか使えません。

スイッチ
もし
切り換える
{
case 1: オプション 1 で動作; break;
case 2: オプション2に対するアクション; break;
case 3: オプション3に対するアクション; break;
default: デフォルトの動作; break;
}
if( case1 ) { case1での動作; }.
else if( option2 ) { オプション2によるアクション; }.
else if( option3 ) { オプション3によるアクション; }.
else { default action; }.