OOP, mql5'te şablonlar ve makrolar, incelikler ve kullanım teknikleri - sayfa 5

 
pavlick_ :

Çoklu geçişe gelince - Acele ettim, saf bir şekilde µl'nin buna izin vereceğini düşündüm.

Yani değişkenler burada. Ancak işlevlerle - evet, çok geçişli çıkıyor, bu yüzden her şey doğru söylendi. Sorun, tam olarak işlevlerin başlatılma sırası nedeniyle ortaya çıkar. Kısacası, C++'ın değişkenler, işlevler ve türler için geçerli olan tek bir katı düzeni vardır. Ancak MQL'de her şey farklıdır.
 
Alexey Navoykov :
Ну вот я с этого и начинал разговор тут . Планировал тоже заменять все статики на глобалы (хоть это и жесть конечно).  Но как показано выше, с шаблонами такое не прокатит.  С макросами тоже.  А я всё это широко применяю.  Поэтому и сделал свою реализацию.  Хотя она конечно не решает всех проблем.  Динамические массивы по-прежнему нельзя инициализировать, константные типы тоже.  Поэтому их однозначно придётся выносить на глобальный уровень

Ayrıca şablonlardan ve makrolardan geniş ölçüde yararlanıyorum, ancak aynı zamanda serbest işlevleri mimarinin yalnızca yardımcı (ve prensipte genellikle istenmeyen) öğeleri olarak görüyorum. Tüm uygulama nesnelerin içinde paketlendiğinde ve statikler yalnızca sınıf düzeyinde bildirildiğinde, rahatsız edici pervazlar yalnızca, bazen derleyicinin yemin etmemesi için bildirimlerinin doğru sırasının mantığını anlamanın zor olması gerçeğiyle ortaya çıkar. ..

 
Alexey Navoykov :
Yani değişkenler burada. Ancak işlevlerle - evet, çok geçişli çıkıyor, bu yüzden her şey doğru söylendi. Sorun, tam olarak işlevlerin başlatılma sırası nedeniyle ortaya çıkar. Kısacası, C++'ın değişkenler, işlevler ve türler için geçerli olan tek bir katı düzeni vardır. Ancak MQL'de her şey farklıdır.

Her durumda çoklu geçiş kötüdür - özyineleme, kilitlenme vb. Ama sonuçta artılarda ileriye dönük beyanda bulunmak mümkündür. Bu nedenle, yalnızca zihinle, dikkatlice (açık ileri bildirim) ve şimdiki gibi çok geçişli bir derleyici ile değil - sanki herhangi bir işlev için ileriye dönük bir bildirim yapılmış gibi, er ya da geç bu tırmık alnına çarpacaktır.

 
pavlick_ :

Her durumda çoklu geçiş kötüdür - özyineleme, kilitlenme vb. Ama sonuçta artılarda ileriye dönük beyanda bulunmak mümkündür. Bu nedenle, yalnızca akıllıca, dikkatlice ve şimdiki gibi çok geçişli bir derleyici ile değil - sanki herhangi bir işlev için ileriye dönük bir bildirim yapılmış gibi, er ya da geç bu tırmık alnına çarpacaktır.

Kabul ediyorum. Biraz önce bu konu bir zamanlar tartışılmıştı. Burada, birçok kişi bu dilde, işlev bildirimlerinin sırası ile uğraşamazsınız. Evet, dürüst olmak gerekirse, kendimden bir zamanlar bundan memnun kaldım) Ve artılarda, sıkıcılığı rahatsız etti. Ama tecrübe ile anlayış gelir.

 
Ilya Malev :

Ayrıca şablonlardan ve makrolardan geniş ölçüde yararlanıyorum, ancak aynı zamanda serbest işlevleri mimarinin yalnızca yardımcı (ve prensipte genellikle istenmeyen) öğeleri olarak görüyorum. Tüm uygulama nesnelerin içinde paketlendiğinde ve statikler yalnızca sınıf düzeyinde bildirildiğinde, rahatsız edici pervazlar yalnızca, bazen derleyicinin yemin etmemesi için bildirimlerinin doğru sırasının mantığını anlamanın zor olması gerçeğiyle ortaya çıkar. ..

Kabul ediyorum, her şey açıkça OOP'de yerleşikse, yalnızca ücretsiz işlevlere değil, şablon yöntemlerine de ihtiyaç duyulmaz. Evet, sadece burada C++ ve C# arasında az gelişmiş bir melezle uğraşıyoruz. Bu nedenle, koltuk değneği ile çok şey uygulanmalıdır)
 
Alexey Navoykov :
Kabul ediyorum, her şey açıkça OOP'de yerleşikse, yalnızca ücretsiz işlevlere değil, şablon yöntemlerine de ihtiyaç duyulmaz.

OOP, OOP olmasa bile, bir sürü tekrarlayan kod yazmak istemediğiniz her yerde şablon yöntemlerine ihtiyaç vardır. Serbest işlevler başka bir konudur - bunlar zaten farklı programlama stilleridir.

 
Ilya Malev :

OOP OOP olmasa bile, bir sürü tekrarlayan kod yazmak istemediğiniz her yerde şablon yöntemlerine ihtiyaç vardır.

OOP'de bunun için arayüzler icat edilmiştir.
 
Alexey Navoykov :
OOP'de bunun için arayüzler icat edilmiştir.

Arayüzler biraz farklı olsa da. Aynı kodun, parametre sınıfına bağlı olarak farklı tiplerle aynı işi yapmasını istersem (ek sınıflar bildirmeden), arayüz yardımcı olmaz.

 
Ilya Malev :

Arayüzler biraz farklı olsa da. Aynı kodun, parametre sınıfına bağlı olarak farklı tiplerle aynı işi yapmasını istersem (ek sınıflar bildirmeden), arayüz yardımcı olmaz.

Parametreler farklı türlerdeyse, karşılık gelen türlerle birkaç aşırı yüklenmiş yöntem yapmak mantıklıdır. Yine de onları bir şekilde fonksiyonda ayırmanız gerekiyor. Bu nedenle, aynı zamanda meçhul bir tip, yani. yanlışlıkla herhangi bir şeyi iletebilir ve kütüphanenin içinde vızıldamayan bir derleme hatası alabilirsiniz. Ya da belki bile alamam, ki bu iki kat iyi değil)

Kısacası, tam teşekküllü OOP'de şablon işlevleri bir koltuk değneğidir (nadir istisnalar dışında)

 
Alexey Navoykov :


Kısacası, tam teşekküllü OOP'de şablon işlevleri bir koltuk değneğidir .

İşte geliyoruz

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

Alexey Navoykov , 2019.01.25 10:11

İşte burada konuşmaya başladım. Ayrıca tüm statikleri globallerle değiştirmeyi planladım (bu elbette zor olsa da). Ancak yukarıda gösterildiği gibi, bu şablonlarla çalışmayacaktır. Makrolar da. Ve yaygın olarak kullanıyorum . Bu yüzden uygulamamı yaptım. Her ne kadar kesinlikle tüm sorunları çözmese de. Dinamik diziler hala başlatılamaz ve sabit türler de başlatılamaz. Bu nedenle, kesinlikle küresel düzeye getirilmeleri gerekecektir.
Tüm kodlarınızın koltuk değnekleriyle yapıldığı ortaya çıktı? Kişisel bir şey değil.