MT5 için dilekler - sayfa 103

 
A100 :

ME5, derleme sırasında bence haklı olmayan bir hata üretiyor.


Adil nokta - hadi yapalım.
 

Aslında RadioButtons'a eşdeğer olan ENUM_XXX formunun önceden tanımlanmış numaralandırmalarının 1'den numaralandırılmasını istiyorum, şimdi ise bunlar varsayılan olarak numaralandırılmıştır, yani. 0'dan. Soru, varsayılanları değiştirmekle ilgili değil, bunun yerine değiştirmekle ilgili.

 enum ENUM_ORDER_TYPE {
         ORDER_TYPE_BUY ,
         ORDER_TYPE_SELL , ...
};

Öyleydi

 enum ENUM_ORDER_TYPE {
         ORDER_TYPE_BUY = 1 ,
         ORDER_TYPE_SELL , ...
};

Gerekçe aşağıdaki gibidir - bir örnek:

 MqlTradeRequest request { ...
         ENUM_ORDER_TYPE      type; ...
}

Kodun bir yerinde request.type değerini analiz ettiğimde, 0'a eşitse, başlatılmamış mı yoksa başlatılmış mı olduğunu anlamak imkansız.

request.type = ORDER_TYPE_BUY;

Bu, RadioButton'a eşdeğer ENUM_ XXX gibi önceden tanımlanmış enumların çoğuyla ilgili durumdur ve mevcut durumda doğru işleme için kodun haksız karmaşıklığı gereklidir.

 
Ne yazık ki, numaralandırmanın sıfırdan olduğu diğer dillerle uyumluluğun korunması nedeniyle bu mümkün değildir.
 
Renat : Ne yazık ki, numaralandırmanın sıfırdan yapıldığı diğer dillerle uyumluluğun korunması nedeniyle bu mümkün değildir.

Ve önceden tanımlanmış bir numaralandırmanın ilk üyesi olarak belirli bir tarafsız tanımlayıcıyı reçete etmenizi engelleyen nedir? Örneğin:

 enum ENUM_ORDER_TYPE 
  {
   ORDER_TYPE_ undefined ,
   ORDER_TYPE_BUY ,
   ORDER_TYPE_SELL , 
   ...
  };

"Sıfırdan numaralandırmayı" koruyacağız ve başlatılmamış değişkenler kolayca hesaplanabilir.

 
Yedelkin :

Ve önceden tanımlanmış bir numaralandırmanın ilk üyesi olarak belirli bir tarafsız tanımlayıcıyı reçete etmenizi engelleyen nedir? Örneğin:

Ve gerisini düşünürseniz, orijinal numaralandırma setini zaten kim kullanıyor? Bu, tüm sunucu kompleksinin şaşkın görünümünden bahsetmiyor.

Genel olarak, soru yanlış sorulmuştur. Geliştirici tembel olmamalı ve dünyanın geri kalanını bu dünyanın kendi kendini yok etmesiyle kendisine uyum sağlamaya zorlamamalıdır.

 
Renat : Ve gerisini düşünürseniz, orijinal numaralandırma setini zaten kim kullanıyor?

Peki, tekrar düşünelim, "gerisi hakkında". Adlandırılmış sabit tanımlayıcılar neden tanıtılıyor? - Bu aynı tanımlayıcıları kullanmak için doğru. Ayrıca, bu tanımlayıcıları kullanmak için, numaralandırma üyelerine hangi belirli değerlerin atandığını bilmek kesinlikle gerekli değildir. Yoksa yetkin programcıların tanımlayıcılar kullanmak yerine , numaralandırma üyelerinin varsayılan değerlerini bulduklarını ve ardından bu varsayılan değerlere göre kontroller yaptıklarını mı varsayıyorsunuz?

Renat : Bu, tüm sunucu kompleksinin şaşkın görünümünden bahsetmiyorum bile.

Onlar. Anladığım kadarıyla teklifin kendisini uygulamak zor değil mi?

Renat : Genel olarak soru yanlış sorulmuştur. Geliştirici tembel olmamalı ve dünyanın geri kalanını bu dünyanın kendi kendini yok etmesiyle kendisine uyum sağlamaya zorlamamalıdır.

Evet, aslında bu konunun yazarı tembelliği yüzünden bir başkasının dünyasını yok etmeyecekti. Ve sadece iyileştirme için özel bir öneride bulundum. Ve sıfır değerinin aşırı yüklendiğini açıkladı.

 

Kapsamın en az bir sınıf olduğu enum tarafından adlandırılan öğelerin adlarını tanıtmak istiyorum,

 void test1() { enum ENUM_1 { ELEM1 }; }
void test2() { enum ENUM_2 { ELEM1 }; } //ошибка

class A {
         enum ENUM_A { ELEM1 };
};
class B {
         enum ENUM_B { ELEM1 }; //ошибка
};

Sınıfların Gerekçesi: Beklenmedik bir şekilde kitaplık (üçüncü taraf dahil) ve/veya önceden tanımlanmış olanlarla çakışabilecek benzersiz bir ad bulmanız gerekir. Ek olarak, SL, TP, PRICE, vb. numaralandırmalarının benzer adlarını birkaç sınıfta aynı anda kullanmak mümkün olacaktır. çatışma korkusu olmadan.

İşlevlerin gerekçesi: kritik değil, aynı zamanda

 
A100 :

enum kapsamı adlı öğelerin adlarını tanıtmak istiyorum

Sınıfların Gerekçesi: Beklenmedik bir şekilde bir kitaplık ve/veya önceden tanımlanmış bir kitaplık ile çakışabilecek benzersiz bir ad bulmanız gerekir. Ek olarak, SL, TP, PRICE, vb. numaralandırmalarının benzer adlarını birkaç sınıfta aynı anda kullanmak mümkün olacaktır. çatışma korkusu olmadan.

İşlevlerin gerekçesi: kritik değil, aynı zamanda

C++'da buna ne dersiniz?
 
sergeev :
C++'da buna ne dersiniz?

oradan bacaklar bir paradoks, ama ancak şimdi (kısıtlamalar olduğunda) neden her şeyin orada yapıldığını anlamaya başladım :)

Tabii ki onsuz da yapabilirsiniz - tüm sınıflar için yazmak benzersiz bir addır, ancak büyük programlar için ve dahası genel kullanıma yönelik kitaplıklar için - bir seçenek değil

 
A100 : ENUM_XXX biçimindeki önceden tanımlanmış numaralandırmaların gerçekte 1'den numaralandırılmış RadioButtons'a eşdeğer olmasını istiyoruz, oysa artık bunlar varsayılan olarak numaralandırılmıştır, yani. 0'dan. Soru, varsayılanları değiştirmekle ilgili değil, değiştirmekle ilgili ...

Bunu deneyin ("başlatma" için):

YANLIŞ DEĞER

Bir sabit, dolaylı olarak herhangi bir enum türüne dönüştürülebilir.

-1