初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1334

 
Artyom Trishkin:
私が渡したコードの何かを書き直したのは、アレクセイだったのです。あるいは、甘く見ていたのかもしれません。もう覚えていないことを明確にするために、簡単な例として「土下座」して書きました。

アレクセイなら教えてくれるかも)

 
Valeriy Yastremskiy:

その繰り返しは終わることなく、新たなサイクルが始まるわけでもなく、次のIfへと進んでいくのです。論理が変わる。

いいえ、もともとこの条件は、ポインタの作成に成功したら、リストに追加するように設定されています。カーブブラケットを閉じ、障害が発生した場合、加算は実行されません。continue演算子 ではロジックが少し違いますが、結果は同じです。
 

Artyom Trishkin:
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.

//+------------------------------------------------------------------+
//| CNewBar Time Возвращает время нулевого бара                      |
//+------------------------------------------------------------------+
datetime CNewBar::Time(void)
  {
   datetime array[1], ret;
   ret = CopyTime(this.m_symbol, this.m_timeframe, 0, 1, array) == 1 ? array[0] : 0;
   return(array[0]);
 }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm = this.Time();
   if(tm == 0)
      return false;
   if(tm != this.m_time)
     {
      this.m_time = tm;
      return true;
     }
   return false;
  }


Artemさん、なぜここでthisキーワードを 使うのですか? これがないと、メソッドがクラスのメンバーで 動作してしまうのですが...。

 
Mikhail Tkachev:

Alexeyさん、こんなに詳しく答えてくれてありがとうございます。
コード内のret変数の用途がよくわからないのですが...。
メソッドがarray[0]を返す場合、なぜ計算されるのですか?
P.S.
なぜクラスメソッドで これを使うのか?私たちは、この特別なクラスのメンバーと一緒に...


  1. 関数CopyTimeは 値を返すので、変数に返すようにすると、事態が悪化しない... デバッグの場合、何ができたか確認することができる。
  2. は、Artyomが書いたものです。どうやら、個人の好みのようです。欲しくても欲しくなくても書く人がいる ::
ps; 今気づいたのですが、ret datetimeの変数型は・・・もちろんint型であるべきです。そうか、それも直さないといけないのか...。
 
Alexey Viktorov:
  1. CopyTime関数は 値を返すので、変数に返させれば、悪化することはないのですが... デバッグの場合、何ができたか確認することができます。
  2. は、Artyomが書いたものです。どうやら、個人の好みのようです。一部の人々は、それが必要である - 必要ではない書き込み:。

1.ここでCopyTime関数は 何のためにあるのか?

2.これは個人的な好みなのか、それとも必要なことなのか。

 
Mikhail Tkachev:

1.CopyTime関数は 何のためにあるのですか?

2.これは個人の好みなのか、それとも必要なのか?

CopyTime()が気に入らない場合は、iTime()に置き換えてください。違いはなく、現在のバーの時間を取得することが主な内容です。

頭の中では、いつ頃書かれたものなのか、ぼんやりと覚えています。私もこの質問をしたような気がします...そして、私が間違っていなければ、これは他のクラスに同様のものがある場合に、参照がローカルメソッドのみであることを保証するものです。もちろん、アルチョムも明らかにします。

 
Alexey Viktorov:
いや、あそこの条件はもともと、ポインタの作成に成功したらリストに追加する、みたいな設定になっている。カーブブラケットは閉じており、失敗した場合は加算が実行されない。continue演算子 ではロジックが少し違いますが、結果は同じです。

そう、結果は同じで、中身が違うのです。色とロジックですが、コンティニューした方が早いと思います.

 
Mikhail Tkachev:


Artemさん、なぜここでthisというキーワード が使われているのですか? なぜなら、thisがなくても、メソッドはクラスのメンバーで 動作するからです...。

そうでしょう。そうしてほしいから使っているのです :)どのクラスのメソッドが使われるかを明示的に示しています。

親クラスと子クラスがあり、同じ名前のメソッドが2つあるが、何らかの理由で仮想化されていない場合、どちらを使うか明示的に指定しなければならない。

親クラスをCParent、継承クラスをCInheritedとし、両クラスともMethod()メソ ッドを持つとします。

この場合、CParent クラスのメソッド Method() を呼び出すと、明示的に CParentクラスのメソッドを 呼び出すことになります - ここではその必要はありません。これがあってもなくても、メソッドを呼び出すことができます。

CInheritedなクラスでMethod()メソッドを呼び出すと、最初に呼び出したクラスに属するメソッドを探すので、そのクラスのメソッドも呼び出さ れます。

CInherited クラスで CParent::Method() を呼び出すと、このように呼び出されるのは親クラスの メソッドです。 コンテキスト解決演算子によって親クラスに属するメソッドを明示的に指定 したためです。

しかし、それでも、私はメソッドを呼び出すと CInherited クラスの Method() this で継承 する- この (this == "this") 継承クラスが呼び出さ れることを確認するためです。

これを使っての説明は他にもあります。OOPに詳しい人なら教えてくれるかもしれません。

 
Valeriy Yastremskiy:

そう、結果は同じで、中身が違うのです。色とロジックですが、コンティニューした方が早いと思います.

何の違いもないはずです。括弧やインデントが少ないので、見た目がきれいなんです。

 
Alexey Viktorov:
  1. CopyTime関数は 値を返すので、変数に返してあげれば、悪化することはないのですが... デバッグの場合は、何ができたか確認することができます。
  2. は、Artyomが書いたものです。どうやら、個人の好みのようです。書いている人もいますが、私はいらないです ::
ps; 今気づいたのですが、ret datetimeの変数型は・・・もちろんint型であるべきです。でも、気にしないで、私も直さないと...。

私もその一 人で、特にクラスから標準関数を呼び出すときは、必ずグローバルコンテキストを指定します。ただ、このクラスに標準関数と同じ名前のメソッドを書こうと思えるからです--そうすれば、それが何をするのか忘れることはないでしょう。そこで、標準の関数を呼び出すには :: が便利で、同じ名前の私のメソッドを呼び出すにはこれが便利なのです。

理由: