Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1334

 
Artyom Trishkin :
Verdiğim kodda bir şeyi değiştiren Aleksey'di. Ya da belki gözden kaçırdım - basit bir örnek olarak "dizlerimin üstüne" yazdım, ne olduğunu hatırlamıyorum.

M.b. Alexey anlatacak

 
Valeriy Yastremskiy :

Döngünün yinelemesi bitmeyecek ve yenisi başlamayacak, ancak bir sonraki If'ye geçecektir. Mantık değişecek.

Numara. Orada, koşul başlangıçta, işaretçi başarıyla oluşturulduysa listeye eklenecek şekilde ayarlandı. Kavisli ayraç kapatılır ve başarısız olursa, basitçe ekleme yapılmayacaktır. Ve devam ifadesi ile; Mantık biraz farklı ama sonuç aynı.
 

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, burada bu anahtar kelime neden kullanılıyor? Sonuçta, onsuz bile, yöntemler sınıf üyeleriyle çalışacak ...

 
Mikhail Tkachev :

Alex, böyle ayrıntılı bir cevap için teşekkürler.
Yukarıdaki kod parçasında ret değişkeninin amacı net değil...
Yöntem yine de dizi[0] döndürürse neden hesaplanır?
ZY
Bunu neden bir sınıf yönteminde kullanıyorsunuz? Bu özel sınıfın üyeleriyle çalışıyoruz...


  1. CopyTime işlevi bir değer döndürdüğünden, bir değişkene dönmesine izin verin, bundan daha kötü olmayacak... Hata ayıklama durumunda, ne olduğunu kontrol etmek mümkün olacaktır.
  2. Bu Artyom tarafından yazılmıştır. Görünüşe göre kişisel tercih. Bazıları gerekli - yazmanıza gerek yok:
not; Değişkenin tipinin ret datetime olduğunu şimdi fark ettim... Elbette, int tipinde olmalı. Eh, ayrıca düzeltilmesi gerekecek ...
 
Alexey Viktorov :
  1. CopyTime işlevi bir değer döndürdüğünden, bir değişkene dönmesine izin verin, bundan daha kötü olmayacak... Hata ayıklama durumunda, ne olduğunu kontrol etmek mümkün olacaktır.
  2. Bu Artyom tarafından yazılmıştır. Görünüşe göre kişisel tercih. Bazıları gerekli - yazmanıza gerek yok:

1. CopyTime işlevi neden burada ?

2. M.b. Artem buna cevap verecek - kişisel tercih mi yoksa gerekli mi?

 
Mikhail Tkachev :

1. CopyTime işlevi neden burada ?

2. M.b. Artem buna cevap verecek - kişisel tercih mi yoksa gerekli mi?

CopyTime()'ı sevmeyin, iTime() ile değiştirin. Fark yok, asıl şey mevcut çubuğun zamanını almak.

Bunun ne zaman yazıldığına dair belirsiz bir hatıra kafamda beliriyor. Görünüşe göre bu soruyu ben de sordum... Ve eğer hiçbir şeyi karıştırmazsam, bu, çağrının yalnızca diğer sınıflarda benzer yöntemler varsa, yerel yöntemlere olacağını garanti eder. Ve elbette Artyom açıklığa kavuşturacak.

 
Alexey Viktorov :
Numara. Orada, koşul başlangıçta, işaretçi başarıyla oluşturulduysa listeye eklenecek şekilde ayarlandı. Kavisli ayraç kapatılır ve başarısız olursa, basitçe ekleme yapılmayacaktır. Ve devam ifadesi ile; Mantık biraz farklı ama sonuç aynı.

Evet sonuç aynı, içi farklı. Benim için, renk ve mantık için olmasına rağmen, bir süreklilik ile daha hızlı ....

 
Mikhail Tkachev :


Artem, burada bu anahtar kelime neden kullanılıyor? Sonuçta, onsuz bile, yöntemler sınıf üyeleriyle çalışacak ...

İrade. Bunu kullanıyorum çünkü istiyorum :) Bu açıkça hangi sınıf yöntemlerinin kullanıldığını gösterir.

İki sınıfınız varsa - bir ebeveyn ve ikincisi sırasıyla bir ardılsa ve aynı adla iki yöntem tanımlarlar, ancak bir nedenden dolayı sanal değillerse, hangi yöntemin kullanılacağını açıkça belirtmeniz gerekir.

Diyelim ki üst sınıf CParent ve devralınan sınıf C Kalıtıldı ve her ikisinin de Method() yöntemi var.

Bu durumda, CParent üst sınıfında Method() yöntemini çağırırsak, CParent sınıfının yöntemi açık bir şekilde çağrılır - burada bu gerekli değildir. Bir metodu onlu veya onsuz çağırabilirsiniz.

Miras alınan C Inherited sınıfında Method() yöntemini çağırırsak, önce çağrıldığı sınıfa ait bir yöntem arandığından, bu sınıfın yöntemi de çağrılır.

Bu yöntemi CParent::Method() yöntemiyle devralınan devralınan C sınıfında çağırırsak, burada üst sınıfa ait yöntemi bağlam çözümleme operatörüyle açıkça belirttiğimiz için üst sınıfın yöntemi çağrılır.

Ama yine de yöntemi çağırırdım Miras alınan C sınıfındaki Method() Bununla miras alınır - bu (bu == "bu") miras alınan sınıfın yönteminin çağrılacağından emin olmak için.

Bunun kullanımı için başka açıklamalar da var. Belki OOP'de daha deneyimli biri söyler.

 
Valeriy Yastremskiy :

Evet sonuç aynı, içi farklı. Benim için, renk ve mantık için olmasına rağmen, bir süreklilik ile daha hızlı ....

Hiçbir fark olmamalı. Sadece benim için kod daha güzel görünüyor - parantez ve girintilerle daha az yüklü.

 
Alexey Viktorov :
  1. CopyTime işlevi bir değer döndürdüğünden, bir değişkene dönmesine izin verin, bundan daha kötü olmayacak... Hata ayıklama durumunda, ne olduğunu kontrol etmek mümkün olacaktır.
  2. Bu Artyom tarafından yazılmıştır. Görünüşe göre kişisel tercih. Bazıları gerekli - yazmanıza gerek yok:
not; Değişkenin tipinin ret datetime olduğunu şimdi fark ettim... Elbette, int tipinde olmalı. Eh, ayrıca düzeltilmesi gerekecek ...

İyi evet. Ben bu "bazılarından" biriyim , özellikle bir sınıftan standart bir işlev çağırdığımda, her zaman genel bağlamı belirtirim. Sırf bu sınıfta standart fonksiyonla aynı ada sahip bir metot yazmayı düşünebildiğim için - böylece ne yaptığını asla unutmam. İşte o zaman :: standart işlevi çağırmak için kullanışlı olur ve bu - aynı adlı yöntemimi çağırmak için.