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

 

Mihail Matkovskij :

Ve atlanabilmelerine rağmen, soru şu ki, diğer modern PL'lerde bu tür sorunlar yoksa neden?

Diğer EP'lerde her şey farklı şekilde organize edilmiştir. Örneğin, Java'nın global değişkenleri ve sabitleri yoktur, ancak bunun yerine bildirilen sınıfların statik değişkenleri kullanılabilir. Ancak bunun özü değişmez, çünkü farklı sınıflarda çoğaltılan statik bir değişkenin adını belirtirseniz, derleyici sizden paketin ve ait olduğu sınıfın adını netleştirmenizi isteyecektir, çünkü derleme işlemi telepatik yeteneklere sahip değildir. Aynı şekilde derslerde. Farklı paketlerde yinelenen bir sınıf veya arayüz adı belirtirseniz, derleyici sizden paketin adını netleştirmenizi tekrar isteyecektir.
 
Mihail Matkovskij :

Ve hata kritik olmasa da, yine de elverişsizdir.

Evet, bu bir hata değil, yani .. bildirim yerine. Bazı dillerde bu tür bir gösterim bile yoktur. Yerel bölgede bir şey yukarıdaki seviyeden bir şeyi engelledi, tamam. Yani öyle olması gerekiyor. Her ne kadar bazı durumlarda böyle bir uyarı çok faydalıdır.

Örneğin, global değişkenlerin MQL ile hiçbir ilgisi yoktur ve benim tavsiyem onları yanlara doğru kullanmamaktır, örneğin:

Birkaç kapsam oluşturuyoruz:

 int OnInit ()
  {
         int i = 10 ;
        {
                 int i = 5 ;
                {
                         int i = 0 ;
                }
        }
   return ( INIT_SUCCEEDED );
  }

Ve bekçi, 2 uyarı alıyoruz.

declaration of 'i' hides local declaration at line 3     
declaration of 'i' hides local declaration at line 5     

Dolayısıyla sonuç -

1) Bu tür uyarıları dikkate almayın
2) aynı isimleri aşağıdaki/yukarıdaki kapsamlarda yapmayın
3) hizmet masasını bu bildirimi işe yaramaz olarak kaldırmaya ikna edin

 
Igor Volodin :

3) hizmet masasını bu bildirimi gereksiz olarak kaldırmaya ikna edin

Her salak hizmet masasını şu ya da bu kuralı kaldırmaya ikna ederse, çünkü onun bakış açısına göre işe yaramaz, o zaman dil yakında yozlaşıp ilkel bir zırvaya dönüşecek.

 
Mihail Matkovskij :

Yani, nasıl yaratılmaz? Herhangi bir programlama dilinde, global değişkenler serbestçe kullanılır ve bu normaldir, ancak burada derleyici yemin eder. Ve hata kritik olmasa da, yine de elverişsizdir.

Puan değişkeni 1 puanın fiyatını bildirir ve standart Puanın yerine geçer. MarketInfo(EA_Symbol(), MODE_POINT) işlevi, herhangi bir enstrümanın 1 puanının fiyatını verir. Ayrıca, nokta değişkeni, elbette küresel bir değişkense, bir danışmanın gövdesinde herhangi bir işlevde kullanılabilir. Bu tür durumların belirli rahatsızlıklara neden olduğunu ve oldukça sık olduğunu kabul edin (elbette, MQL'de programlama deneyiminiz yoksa). Ve atlanabilmelerine rağmen, soru şu ki, diğer modern PL'lerde bu tür sorunlar yoksa neden?

Nokta değişkeni global bir değişken olamaz. Çünkü farklı araçlarda bir puanın fiyatı farklıdır (kural olarak puanların fiyatları aynı olmasına rağmen). Bu nedenle, bir puanın fiyatı yalnızca belirli bir sembol üzerinde işlem yapan belirli bir Uzman Danışman içinde hesaplanabilir ve başka bir şey değil.
 

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.

 

Renk şemaları kabul edilir. Böylece sadece editörde metnin ve arka planın rengi değil, diğer pencerelerde de değişir.

Böylece, sınıfın veri üyesi, isimler eşleştiğinde girdi değişkenlerinin rengine boyanmaz.

 

Zaten birkaç kez, çalışma gününü bitirip programların, tarayıcıların vb. Pencerelerini kapatarak , optimizasyon modunda çalışan MT5 terminalini yanlışlıkla kapattım. O. tüm sonuçlar gitti. Yeniden başlatma her şeyi en baştan başlatır.

Birçok program, pencereyi kapatmak için tıkladığınızda, kapatmanın doğru olup olmadığını tekrar sorar ve kaydedilmemiş veriler kaybolabilir.

Terminal optimize ediliyorsa bunu yapmak güzel olurdu.

 
Igor Volodin :

Evet, bu bir hata değil, yani .. bildirim yerine. Bazı dillerde bu tür bir gösterim bile yoktur. Yerel bölgede bir şey yukarıdaki seviyeden bir şeyi engelledi, tamam. Yani öyle olması gerekiyor. Her ne kadar bazı durumlarda böyle bir uyarı çok faydalıdır.

Örneğin, global değişkenlerin MQL ile hiçbir ilgisi yoktur ve benim tavsiyem onları yanlara doğru kullanmamaktır, örneğin:

Birkaç kapsam oluşturuyoruz:

Ve bekçi, 2 uyarı alıyoruz.

Dolayısıyla sonuç -

1) Bu tür uyarıları dikkate almayın
2) aynı isimleri aşağıdaki/yukarıdaki kapsamlarda yapmayın
3) hizmet masasını bu bildirimi gereksiz olarak kaldırmaya ikna edin

Aynı kapsamda aynı isme sahip 2 değişken bir bağırsak değildir ve herhangi bir programcı bunu bilir. Ancak sorun şu ki, bu kapsam, herhangi bir ortalama programcının kurcalayamayacağı standart modüllere kadar uzanıyor, çünkü. kendini geliştirici olarak görmez. Uyarıları kaldırmak da bir seçenek değildir. Onlara aynı şekilde dikkat etmeyin, çünkü bunlar tam bir rahatsızlıktır. Önemli uyarıları kaçırabilirsiniz.

Burada sorunu çözmek için 2 seçenek görüyorum.

1. Açıkça belirtilmedikçe eklentinin eklentiyi görmemesini sağlayın

2. Geliştiriciler sözdizimini değiştirmek istemiyorlarsa, işlevlerde parametreleri bildirmek için sınıf alanlarına benzer bir kural getirin, örneğin, parametre adları i veya i_ (Alg. Input'tan) ile başlamalı ve böylece tüm parametreleri standart olarak düzeltmelidir. modüller

 

Derleyici düzgün çalışıyor ve bu uyarılar kesinlikle doğru.

Tek bir çıkış yolu var: Değişkenlerin örtüşmesine izin verme ve başkalarının bu hakka saygı duymasını isteyerek hata yapma hakkını elinde tutmaya çalışma.

 
Renat Fatkhullin :

Derleyici düzgün çalışıyor ve bu uyarılar kesinlikle doğru.

Tek bir çıkış yolu var: Değişkenlerin örtüşmesine izin verme ve başkalarının bu hakka saygı duymasını isteyerek hata yapma hakkını elinde tutmaya çalışma.

Muhtemelen beni yanlış anladın. Kimseden bir şey talep etmiyorum, sadece MQL'yi nasıl daha kullanışlı hale getireceğiniz konusunda tavsiyelerde bulunuyorum.