Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 11

 
Ihor Herasko :

Birçok yazılım şirketinde, bu tür bir kod için tüm parmaklar dövülür. Her zaman ve her yerde gerekli olan ilk şey, "ekstra okuma"nın olmamasıdır. Örneğin, fonksiyon girilirken koşul kullanılırsa:

sonra şunu yazmanız önerilir:

Bu yaklaşım yuvalama koşullarında çok yardımcı olur.

Bir kez daha - parmaklarınızı çırpın. Sonuçta, kimse OrderType() işlevinin ne döndürdüğünü kontrol etmedi. Ya da belki -1 veya 6 döndü? Bu, her zaman uzak durmanız gereken bir şey olan derleyici özelliklerini bağlamanın bir örneğidir. Kendiniz birçok platformlar arası kod örneği veriyorsunuz. Öyleyse neden onu bu durumda bırakıyorsun? MQ'dan yeni bir derleyici çıkacak ve bu kod artık düzgün çalışmayacak.

Yazılım şirketlerinin tartışılanlarla ne ilgisi var?! Kod çalışmayı bırakmayacak, burada hile yapmaya gerek yok.

Aynı durum devam ile. Tür kodu:

okumaktan daha zor:

Ancak her iki durumda da yürütme verimliliği aynıdır.

Bu durumda, bir satırdaki kodun okunması altı satırdan daha kolaydır. Üstelik daha mantıklı çünkü döngünün içinde olma ihtiyacına hiçbir şekilde bağlı değildir. Onlar. İlk seçenek sakince kopyalanıp yapıştırılabilir, ikincisi - hayır.

 
fxsaber :

Pekala, yukarıdaki Lots[] örneği gerçek bir hazinedir ve kodun nasıl hem çok kısa hem de kesinlikle anlaşılır olabileceğini gösterir.

Bu, anlamanız için koddur. Ve belgelere yeni bakanlar ve kodunuzu görenler hemen merak etmeye başlayacaklar: dizinin neden 8 boyutu var ve belgelerde sadece 6 sipariş türü var.

Ve kişisel olarak, eğer ayrı ayrı ayrılmışlarsa, yani koşulları okumak benim için daha uygun. bunun gibi:

 if (! OrderSelect (i, SELECT_BY_POS ))
   continue ;

if ( OrderSymbol () != Symbol ())
   continue ;

if ( OrderMagicNumber () != m_nMagicNumber)
   continue ;

Ayrıca bundan daha iyi hissediyorum:

 if ( OrderSelect (i, SELECT_BY_POS ) && OrderSymbol () == Symbol () && OrderMagicNumber () == m_nMagicNumber)
{
}

Ama bence zevk ve alışkanlık meselesi. Kimsenin bir şey dayatmasına veya kanıtlamasına gerek yok.

Öte yandan, sana katılıyorum:

MT4-история торгов отсортирована по времени закрытия и это правило меняться не будет.

Ve bence bu mantıklı ve diğer zamanları hatırlamıyorum.

 
Alexey Kozitsyn :

Bu, anlamanız için koddur. Ve belgelere yeni bakanlar ve kodunuzu görenler hemen merak etmeye başlayacaklar: dizinin neden 8 boyutu var ve belgelerde sadece 6 sipariş türü var.

Basit bir kodun akıllarda nasıl doğru soruları ortaya çıkardığını görüyorsunuz! Ve bundan sonra Belgelerde yazılan her şeye güvenmeye değer mi?

 
fxsaber :

Ve bundan sonra Belgelerde yazılan her şeye güvenmeye değer mi?

buna değer, bu RTFM programlamanın temel prensibidir  

RTFM
  • lurkmore.to
RTFM (изначально сокр. от англ. read the following manual, «обратитесь к прилагаемому руководству») — типичный ответ службы поддержки на вопрос пользователя, обычно сопровождающийся номером или названием этого руководства.
 
Igor Makanu :

buna değer, bu RTFM programlamanın temel prensibidir  

Gerçekler bu ilkeye aykırıdır.

 
fxsaber :

Yazılım şirketlerinin tartışılanlarla ne ilgisi var?!

Peki, otorite olarak başka kimi getirmeli?

Kod çalışmayı bırakmayacak, burada hile yapmaya gerek yok.

Evet, MT4'te %99 olasılıkla bu doğrudur, çünkü MT4 zaten neredeyse gömülüdür. Ancak böyle sahte bir çapraz platforma dönüşmeye çalışın ve hemen ölümcül bir hataya yol açan kaybolan bir kusurla karşılaşın.

Bu durumda, bir satırdaki kodun okunması altı satırdan daha kolaydır. Üstelik daha mantıklı çünkü döngünün içinde olma ihtiyacına hiçbir şekilde bağlı değildir. Onlar. İlk seçenek sakince kopyalanıp yapıştırılabilir, ikincisi - hayır.

Spesifik olarak belirli bir durum hakkında konuşursak, öyle olabilir, çünkü verilen kod neredeyse her uzman için standarttır. Ancak daha karmaşık bir şey alırsanız, bir satırda yazarken okumak hemen zorlaşır.

Kodunuzla çalışan birinden neden uzaydan gelen küfürleri dinleyesiniz? ))

 
Ihor Herasko :

Peki, otorite olarak başka kimi getirmeli?

Otorite kavramının burada yer alması garip.

Evet, MT4'te %99 olasılıkla bu doğrudur, çünkü MT4 zaten neredeyse gömülüdür. Ancak böyle sahte bir çapraz platforma dönüşmeye çalışın ve hemen ölümcül bir hataya yol açan kaybolan bir kusurla karşılaşın.

MT5'te aynı şekilde yazıyorum ...

Spesifik olarak belirli bir durum hakkında konuşursak, öyle olabilir, çünkü verilen kod neredeyse her uzman için standarttır. Ancak daha karmaşık bir şey alırsanız, bir satırda yazarken okumak hemen zorlaşır.

Ancak if -> else if -> else if -> else yapıları da vardır. Koşullu operatördeki bool ifadesinin neden en ilkel biçimde verilmesi gerektiğini anlamıyorum.

 
Alexey Kozitsyn :

Bu, anlamanız için koddur. Ve belgelere yeni bakanlar ve kodunuzu görenler hemen merak etmeye başlayacaklar: dizinin neden 8 boyutu var ve belgelerde sadece 6 sipariş türü var.

Ve kişisel olarak, eğer ayrı ayrı ayrılmışlarsa, yani koşulları okumak benim için daha uygun. bunun gibi:

Ayrıca bundan daha iyi hissediyorum:

Ama bence zevk ve alışkanlık meselesi . Kimsenin bir şey dayatmasına veya kanıtlamasına gerek yok.

Öte yandan, sana katılıyorum:

Ve bence bu mantıklı ve diğer zamanları hatırlamıyorum.

İşte anahtar kelimeler.

Şahsen ben genelde devam yazmaktan rahatsız oluyorum

Bunların anlamı nedir???? eğer okursan

 if ( OrderSelect (i, SELECT_BY_POS ) && OrderSymbol () == Symbol () && OrderMagicNumber () == m_nMagicNumber)

her şey Rusça okunur:

Sıra seçiliyse ve düzenin simgesi "bizim" ise ve sihir de bizimse... o zaman parantez içindeki her şeyi uygularız.

Ama Rusça'da kulağa nasıl gelmiyor:

Emir seçilmezse cehenneme gidelim...

Sipariş sembolü bizim değilse cehenneme gidelim

vb.

Kendinizi oraya kaç kez göndermeniz gerekiyor ......

Görünüşe göre mql3'te bu mantıklıydı. Bu, durumu kontrol etme süresini kısalttı. Daha sonra tüm koşullar baştan sona kontrol edildi. AMA sonuçta, durum uzun süredir düzeltildi ve kontrol koşulun yerine getirilmediğine rastlarsa, daha fazla kontrol durur. Ve tüm bu hileler kesinlikle hiçbir anlam ifade etmiyor.

 
Alexey Viktorov :

İşte anahtar kelimeler.

Şahsen ben genelde devam yazmaktan rahatsız oluyorum

Bunların anlamı nedir???? eğer okursan

her şey Rusça okunur:

Sıra seçiliyse ve düzenin simgesi "bizim" ise ve sihir de bizimse... o zaman parantez içindeki her şeyi uygularız.

Ama Rusça'da kulağa nasıl gelmiyor:

Emir seçilmezse cehenneme gidelim...

Sipariş sembolü bizim değilse cehenneme gidelim

vb.

Kendinizi oraya kaç kez göndermeniz gerekiyor ......

Görünüşe göre mql3'te bu mantıklıydı. Bu, durumu kontrol etme süresini kısalttı. Daha sonra tüm koşullar baştan sona kontrol edildi. AMA sonuçta, durum uzun süredir düzeltildi ve kontrol koşulun yerine getirilmediğine rastlarsa, daha fazla kontrol durur. Ve tüm bu hileler kesinlikle hiçbir anlam ifade etmiyor.

Bunun bir alışkanlık meselesi olduğunu kendin kabul ettin. Mesela gereksiz yuvalamalardan rahatsız oluyorum, hep geri dönüş yardımı ile kaldırıyorum, devam ediyorum. Ve "hadi cehenneme gidelim" yerine "koşul 1 ve 2 karşılandı" okumaya alışmak kolaydır:

 if (!condition1 || !condition2)
   continue;
 
Vladislav Boyko :

Örneğin fazladan yuvalamadan rahatsız oluyorum, iade ile hep kaldırıyorum, devam et

örneğin, " Mantıksal olumsuzlama DEĞİL (!)" beni rahatsız ediyor, yalnızca işlemci döngüsü ortadan kalkmakla kalmıyor, aynı zamanda mantıksal bir ifadenin okunması "başarısız") okumaya dönüşüyor)))

Örnek olarak, bool işlevlerinde her zaman en çok beklenen yanıt olarak "true" değerini döndürürüm: Şu şekilde sunucu kullanılabilirliği kontrolüne sahibim:

 bool ServerDisable( int count= 10 ){
   for ( int i= 0 ;i<count;i++){
       if ( IsConnected ())
         if ( IsTradeAllowed ())
             if (! IsTradeContextBusy ()){ RefreshRates (); return ( false );}
       Sleep ( 157 );
   }
   Print ( __FUNCTION__ , " Торговый сервер не отвечает" );
return ( true );}

Oldukça okunaklı ve mantıklı buluyorum:

 if (ServerDisable()) return ;

sunucu meşgulse - çıkın, genellikle ticaret işlevlerinde kullanırım, sunucuyu isteklerle çekiçlemek için hiçbir şey yok çünkü meşgul

daha önce de belirtildiği gibi - bir zevk meselesi, ama bildiğiniz gibi: tüm keçeli kalemlerin tadı farklıdır)))