MQL5'in Geleceği - MQL5+ ve hatta MQL6 - sayfa 11

 
Alexey Kozitsyn :

Her şey çoktan anlaşıldı. NULL sabitini kullanın.

Size bir sır vereyim, zaten uygulandı. Fare tekerleğine tıklamanız gerekiyor ve bir artı işareti olacak.

Ve bu uzun zamandır mümkün. Gezginden, göstergeyi, göstergenin takılı olduğu pencereye sürükleyin.

IMHO, en gerekli şey değil.

Bir gezgin var, favoriler var, şablonlar var, profiller var. Her şey özelleştirilebilir. Terminaldeki yardımı okuyun, birçok yeni şey keşfedin!

Numaralandırmalar, kodu daha okunabilir hale getirmek, koddan sabitleri çıkarmak ve bunların yerine bir kişinin aşina olduğu varlıkları koymak için kullanılır.

Örneğin, MqlDateTime yapısının day_of_week değeriyle karşılaştırmak için ENUM_DAY_OF_WEEK numaralandırma değerleri kullanılabilir. Onlar. şöyle yazılabilir:

Ve farklı yazabilirsiniz:

SUNDAY, 0 değerine sahip int türünde adlandırılmış bir sabittir.

Kodu okuyan bir kişi için nasıl daha net olacağını düşünüyorsunuz?

Güzel! Navigatör için teşekkürler! Ona yeterince ilgi göstermedi. Genelde yer kaplamasın diye kapatıyorum. Kısa da olsa yardım edin, ancak okuyun. Hindileri harita penceresine ve birbirinin üzerine sürüklemekle ilgili hiçbir şey yok. Her ne kadar tahmin etmek mümkün olsa da, bir girişimde bulunmak ....)))

Numaralandırmaların anlamını açıkladığınız için teşekkür ederiz! Ancak MQL temel olarak C++ içeren bir aydınger kağıdı olduğundan ve bunun için çok sayıda bağlantı noktası olduğundan, bunlarla çabucak ilgilendim. Ancak yardım ve eksik makalelerde bir sürü yazım hatası - bu iyi değil.

Sonuç. İyi yazılmış bir yardımla, forumdaki aptallardan gelen bir sürü aptal sorudan kaçınılabilir!

NULL kısmında, sıfırdır - çok kullanılır. Ancak değişkenlerin maksimum değerleri son derece nadirdir, neredeyse hiçbir zaman. Örneğin, bir değişken, göstergeleri analiz ettikten sonra üç durumu saklar: AL, SATIŞ veya HİÇBİR ŞEY. POSITION_TYPE_BUY, POSITION_TYPE_SELL hazır sabitleri kullanırsanız, bunlardan biri sıfırdır. Tüm türlere genellenirse EMPTY_VALUE'nin NULL'dan daha popüler olacağına eminim.))

 
Alexander Puzanov :

Son derece kullanışlı bir uygulama daha var. Örneğin:

Ve kullanıcı, yorumlarda orada yazdıklarınızdan oluşan 4 öğeden oluşan bir açılır liste alır - "yalnızca Satın Al", "Yalnızca Sat", vb. Puanlar, kullanıcı ayarları penceresinde bir dizi gösterge, zaman çerçevesi, bir dizi koşul vb. listelemek için uygundur.

Tabiiki! Bu durumda, program tarafından kullanıcı tarafından girilen değerleri kontrol etme mekanizmasını basitleştiren yine de ekleyebilirsiniz. Onlar. hepsi (doğru değerler) başlangıçta açıklanmıştır.
 
agvozdezkiy :

NULL kısmında ise sıfırdır ve çokça kullanılır. Örneğin, bir değişken, göstergeleri analiz ettikten sonra üç durumu saklar: AL, SATIŞ veya HİÇBİR ŞEY. Hazır sabitler kullanırsanız POSITION_TYPE_BUY, POSITION_TYPE_SELL , bunlardan biri sıfırdır.

Sorun değil, şöyle yapabilirsiniz:

 #define VALUE_EMPTY - 1        // Пустое значение для числовых типов данных
#define STR_VALUE_EMPTY ""    // Пустое значение для строкового типа

Ve istediğiniz yere koyun.

 
Alexey Kozitsyn :

Sorun değil, şu şekilde yapabilirsiniz:

Ve istediğiniz yere koyun.

Bütün bunlar anlaşılabilir. Bundan bahsetmiyorum.
 
agvozdezkiy :
Bütün bunlar anlaşılabilir. Bundan bahsetmiyorum.

O zaman ne demek istediğini açıkla? Önceden tanımlanmış tüm veri türleri için tek bir sabit hakkında? Bunun uygulanması pek olası değildir.

 
Renat Fatkhullin :

Ne yazık ki, yalnızca deneyimli programcılar böyle bir uyarının yararını ve önemini anlar.

Pekala, herkese derleyiciden bu düzeyde yardım almalarını ve hatalarını düzeltmelerini öneriyorum. Bunlar potansiyel hataların gerçek yerleridir ve acemi geliştiricilerin öğrenmesi çok önemlidir.

Ad alanı yapacak mısınız? O zaman sorun çözülecekti.
 

Birkaç yıl önce forumda "tamamen sanal yöntemler" konusu gündeme gelmişti.

Onlar. c ++ kavramında, torunlarda ZORUNLU geçersiz kılınması gereken, gövdesi olmayan sanal yöntemler:

 virtual void Func1() = 0 ;

Ek olarak, bu tür yöntemleri içeren bir sınıf otomatik olarak soyut hale gelir. Derleyici de bunun kaydını tutar. (Yapıcıyı korumalı bir kapsamda gizleyebilirsiniz, ancak bu standartlara tamamen uymak içindir)

Şimdi "tamamen sanal yöntemlerin" davranışı ciddi şekilde eksik. Böyle bir işlevsellik olmadan, bir kütüphaneyi veya çerçeveyi düzgün bir şekilde hazırlamak imkansızdır: kendi alt sınıfınızı yaratırsınız (ki bu sadece boşuna değildir, ancak diğer sınıflara bir dişli gibi inşa edilmiştir) ve nazikçe yürütürsünüz. tüm arayüz. Şimdi, kalıtsal, yöntemin uygulanmasına girmedi, derleyici yuttu, nifiga çalışmıyor. Ana sınıfın kaynağına mı giriyorsunuz?

Arayüz kavramı, OOP'deki temel kavramlardan biridir. Bu nedenle, böyle bir şeyi MQL6'da değil, 5'te uygulamayı çok isterim.

Bu arada, sanal işlev belgelerinde hata şudur:

Виртуальная функция, как и обычная функция, должна иметь исполняемое тело. При вызове семантика ее точно такая же, как и у остальных функций.

Misal:

 class Base {
private :
         int a;
public :
         virtual int Func1();
};


class Second: public Base {
public :
         int Func2() {
                 return 0 ;
        };      
};

int OnInit () {

        Base* base = new Base();
        Second* foo = new Second();
   return ( INIT_SUCCEEDED );
}

Func1 sanal işlevinin yürütülebilir bir gövdesi yoktur (ve bir değer bile döndürmez), ancak hatasız derler.

 
Igor Volodin :

Birkaç yıl önce forumda "tamamen sanal yöntemler" konusu gündeme gelmişti.

Onlar. c ++ kavramında, torunlarda ZORUNLU geçersiz kılınması gereken, gövdesi olmayan sanal yöntemler:

Ek olarak, bu tür yöntemleri içeren bir sınıf otomatik olarak soyut hale gelir. Derleyici de bunun kaydını tutar. (Yapıcıyı korumalı bir kapsamda gizleyebilirsiniz, ancak bu standartlara tamamen uymak içindir)

Şimdi "tamamen sanal yöntemlerin" davranışı ciddi şekilde eksik. Bu tür bir işlevsellik olmadan, bir kütüphaneyi veya çerçeveyi düzgün bir şekilde hazırlamak imkansızdır: kendi alt sınıfınızı yaratırsınız (ki bu sadece boşuna değildir, ancak dişli gibi diğer sınıflara yerleşiktir) ve nazikçe tamamını yürütürsünüz. arayüz. Şimdi, kalıtsal, yöntemin uygulanmasına girmedi, derleyici yuttu, nifiga çalışmıyor. Ana sınıfın kaynağına mı giriyorsunuz?

Arayüz kavramı, OOP'deki temel kavramlardan biridir. Bu nedenle, böyle bir şeyi MQL6'da değil, 5'te uygulamayı çok isterim.

Bu arada, sanal işlev belgelerinde hata şudur:

Misal:

Func1 sanal işlevinin yürütülebilir bir gövdesi yoktur (ve bir değer bile döndürmez), ancak hatasız derler.

1. Saf sanal işlevler yakında eklenecek

2. Örnekte Func1 çağrısı nerede? Çağrı yok - vücudun varlığı üzerinde kontrol yok.

 
Slawa :

1. Saf sanal işlevler yakında eklenecek

2. Örnekte Func1 çağrısı nerede? Çağrı yok - vücudun varlığı üzerinde kontrol yok.

VS 2015 şunları söyledi

önem kod Tanım proje dosya astar Bastırma Durumu

hata LNK2001 çözümlenmemiş harici sembol "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@@UAEHXZ) TestCPPKodu C:\MyP\AvForex\trunk\TestCPPCode\TestCPPCode.obj 1

hata LNK1120 1 çözülmemiş harici TestCPPKodu C:\MyP\AvForex\trunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1

 
Alexey Volchanskiy :

VS 2015 şunları söyledi

önem kod Tanım proje Dosya astar Bastırma Durumu

hata LNK2001 çözümlenmemiş harici sembol "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@@UAEHXZ) TestCPPKodu C:\MyP\AvForex\trunk\TestCPPCode\TestCPPCode.obj 1

hata LNK1120 1 çözülmemiş harici TestCPPKodu C:\MyP\AvForex\trunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1

Kaynak kodunu göster