記事についてのディスカッション - ページ 2

 

良い記事だ。何をすべきで何をすべきでないかというコンセプトがよく説明されている。

この場合、具体例の誤りは記事の価値を下げるものではない。この課題は見事に解決され、すべてが可能な限り単純明快に書かれている。

ありがとう、オメガ!

 
fxsaber #:

  • ループ内の変数の最初の値が間違っている。
  • ifが1つではなく、2つある。
  • 文字列の比較(文字)は最後になければならない。
  • bool式が括弧でくくられていない。
  • 入力関数にマジック変数がない。
  • 位置オブジェクトが作成されていない。
メタ・エディターでコーディングしたのではなく、書いている最中だったので、公開されるまでこのエラーに気づかなかった。
 

興味深い...

fxsaber #:

  • ループの最初の変数の値が間違っている。
  • 1つのifではなく、2つのifがある。
  • string-comparison(シンボル)は最後にあるべきです。
  • ブール式が括弧でマークされていません。
  • 入力関数にマジック変数がありません。
  • 位置オブジェクトが作成されない。

良いプログラマーになるために(その1): 良いMQL5プログラマーになるために5つの習慣を取り除く

 
Aliaksandr Hryshyn #:

興味深い...。


:)
 
Aliaksandr Hryshyn #:

興味深い...

良いプログラマーになるために(パート1):より良いMQL5プログラマーになるために5つの習慣を取り除く

これはフリーランスであり、ほとんどの場合、顧客は全くコードを理解していない、悪いレビューはコードの品質のためではありません。私はそれを書いた、プログラムは利益を与えなかったので、ここでレビューです。

 

すべての人必読(そしてこの記事の著者はさらに必読) :プログラマーが知っておくべき97のこと

GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
  • github.com
Pearls of wisdom for programmers collected from leading practitioners. - GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitio...
 
ソース
int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

私の意見では、より速く、より明瞭に動作するバリアント:

int PositionsByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
      if(!m_position.SelectByIndex(i))
         return (INVALID_HANDLE);

      if(m_position.PositionType()!=type ||
         m_position.Magic()!=MagicNumber ||
         m_position.Symbol()!=Symbol())
         continue;

      counter++; 
   }
   return counter;
  }

1.ループの初期化の間違いは、バックトラックを行うときに、量から1を引かなければならないことです。

2.2.ライブラリ関数からインデックスによって位置を取得できなかった場合、エラーでループを終了する必要があり、その後、処理する必要がある場合、または再度関数を繰り返し、そうでない場合は、信頼性の低い金額を取得する危険性があり、あなたはまだ財政で動作し、時にはポジションに大きな金額があり、そのような小さなことが損失につながる可能性があります。

3.最初にbool変数をチェックし、次にENUM 列挙をチェックし、その後にint、double、stringをチェックする。チェックに失敗したら、すぐにループの次の要素に進む。

もし&&で比較演算をすると、プログラムは必ず各条件をチェックすることになる。

4.関数の名前も重要で、PositionsByTypeの方が良さそうです。些細なことのように思えますが、この関数を使おうとするとき、ライブラリやその目次を見る必要はなく、標準的な名前Positionsを入力し始めるだけで、PositionsTotal、PositionsByType......と呼び出すためのいくつかの選択肢があります。

5.横スクロールは可読性と開発速度を大幅に低下させるので、使用しないようにコードの幅を尊重する必要があります。


 
それは間違っている:
"&&で比較演算をすると、プログラムは必ず各条件をチェックする"。
比較は最初の偽まで順番に実行される。
ところで、このような状況では、条件が満たされない確率を考慮することもできる。

 
Aliaksandr Hryshyn #:
それは間違っている:
"&&で比較演算を行う場合、プログラムは必ず各条件をチェックする"。
比較は最初の偽まで順番に行われる。
ところで、このような状況では、条件が満たされない確率も考慮に入れることができる。

はい、正しく訂正していただきました。チェックは最初のfalseまで行われます。主な点は、小さいデータ型が最初に来ることです。

条件が関数で構成されている場合、消費リソースの観点から、一番小さいものを最初に、そして一番大きいものまで、プログラムのロジックを壊さないようにする必要があります。

私はすべてのプロジェクトでこのテクニックを使っています。最適化モードのテスターにとって、スピードの向上は顕著です。

削除済み  
Vitaly Muzichenko #:

これはフリーランスであり、顧客はコードを全く理解していないことがほとんどであり、悪いレビューはコードの品質に対するものではない。あなたが書いたプログラムがあなたに利益を与えなかった、それがレビューです。

それともお金の方が大事ですか?