PLO - ページ 3

 

第2パラメータがない場合は同じです。

ファイル:
test-2.mq5  2 kb
 

コードに若干の誤りがありましたので、修正し、チェック出力を追加しました。

x64での私の結果です。

2010.07.16 20:10:57	Test (GBPUSD,M15)	Класс:   828 результат: 0.9999999999999994
2010.07.16 20:10:56	Test (GBPUSD,M15)	Функция: 735 результат: 0.9999999999999994

生成されたコードを解析すると、関数とクラスのメソッド 呼び出しが完全にインライン化されており、実際には同等であることがわかった。

ループ内には関数呼び出しがなく、クラスの速度が若干低下しているのは、これによる間接アドレッシングによるものです。


以下はそのコードです。

class CLASS
  {
protected:
   double            prev;

public:
          CLASS() { prev=0.0; }
   double ma(double v)
     {
      prev=0.1*v+0.9*prev;
      return(prev);
     }
  };

double FUNC(double v,double prev)
  {
   prev=0.1*v+0.9*prev;
   return(prev);
  }
void OnStart()
  {
   double x;
   int    start;
   CLASS  CL;
//---
   start=GetTickCount();
   x=0;
   for(int i=0;i<100000000;i++)
     {
      x=FUNC(1,x);
     }
   Print("Функция: "+IntegerToString(GetTickCount()-start)," результат: ",x);
//---
   start=GetTickCount();
   x=0;
   for(int i=0;i<100000000;i++)
     {
      x=CL.ma(1);
     }
   Print("Класс: "+IntegerToString(GetTickCount()-start)," результат: ",x);
  }
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

関数呼び出しとクラスメソッドの 違いは、このような特別に書かれたテストによってのみ拾い上げることができるのです。

実際には、クラスを使用することで、頻繁に使用するパラメータを渡す手間が省け、高速化することができます。

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Renat:

関数呼び出しとクラスメソッドの 違いは、このように特別に書かれたテストでなければ拾えません。

実際には、クラスを使用することで、頻繁に使用されるパラメータの転送の経済性を犠牲にして、高速化を実現しています。


そうですね、ハードウェアのサポートがない限り、OOPが手続き型プログラミングより速くなることはないでしょう :)

まあ、そんなことより、mql5でOOPに飛び込む予定です、まだ手をつけてませんが))

 
mrProF:

そうですね、ハードウェアのサポートがない限り、OOPが手続き型プログラミングより速くなることはないでしょう :)

まあ、そんなこと言わずに、mql5でOOPに飛び込みます!まだ手をつけてませんが...))

人工頭脳を作りたいプログラマー以外、こんなOOPは必要ない))))

ってか、1ページ目の記事読んだけど・・・意味わかんない・・・クランシー・・・なんで?

ただ、理由を説明する...30指標は、はるかに高速な専門家...または何のために取り付けられている場合があります))))私は本当に理解していない、怒らないでください。

のためかもしれません。




 
maryan.dirtyn:

人工頭脳を作りたいプログラマー以外、こんなOOPは必要ない)))

1ページ目の記事読んだけど、意味わかんない...クラッシー...なんで?

ただ、理由を説明する...30指標は、はるかに高速な専門家...または何のために取り付けられている場合があります))))私は本当に理解していない、怒らないでください。

自分のために人工的な「脳」を書き、トレーダーを無脳化したいプログラマーのために...。
 

OOPが嫌いなら使うな

MT5の基本機能はすべて関数として古典的に実装されています。

また、お菓子の量り売りや包装を買うのは、好みの問題です

冷蔵庫の棚にある、多色包装のお菓子が好きです

 
maryan.dirtyn:

人工頭脳を作りたいプログラマー以外、こんなOOPは必要ない)))

1ページ目の記事読んだけど、意味わかんない...クラッシー...なんで?

ただ、理由を説明する...30指標は、はるかに高速な専門家...または何のために取り付けられている場合があります))))私は本当に理解していない、怒らないでください。

のためかもしれません。




OOPは大規模なプログラムには向いている。
コード行数が50行以下なら、OOPは必要ない。
しかし、コードが多くなりすぎると、何が何に属しているのか、コメントだけではほとんど分からなくなります。
変数が意図したとおりに共有されないと、エラーが発生する確率が高くなり、混乱する。
OOPでは、変数はメソッド(関数)と共にコンテナ(クラス)の中に格納することができます。

OOPで書けて、OOPでなければ書けないタスクはないのです。
利便性の問題です))

OOPは問題を解決する方法ではなく、コードを構造化する方法である。

 

mrProF:

OOPで書けず、OOPでないと書けないタスクはない。

利便性の問題です))

OOPは課題を解決する方法ではなく、コードの構造化の方法である。

そして、その通り...。:)
 

私は間違っていました。「OOPで書けて、OOPでなければ書けないタスクはない」のです。

そういう意味です))