MQL5 dilini sıfırdan kendi kendine öğrenme - sayfa 46

 
Bu arada, kendi meydan okumamda beni mat edecek bir örnek biliyorum. Ama bariz sebeplerden dolayı bunun hakkında yazmayacağım.
 
Vasiliy Sokolov :
Bu arada, kendi meydan okumamda beni mat edecek bir örnek biliyorum. Ama bariz sebeplerden dolayı bunun hakkında yazmayacağım.
yelken ....))))
 
Реter Konow :
yelken ....))))
Hayır, yüzmediler. Bu örnek Veiled OOP'den alınmıştır. Ve burada tartıştığımız şey bunun bir alt kümesidir. Onlar. örnek, normalde yalnızca OOP'de çözülebilecek şeyler olduğunu gösterir. Fonksiyonlar tek başına yeterli olmayacaktır. Yani bu kendi içinde bir çelişki değil, iki yıldızlı bir problem.
Ama bu bir lise mezununun seviyesi ama şimdilik birinci sınıftayız.
 

Global değişkenlerin kötülüğü ve aynı zamanda sınıfın ortak alanları ile ilgili.

Bak.

  1. Toplam boyutu 200k satır olan (aslında küçük bir tane) birkaç yüz dosya içeren bir proje var.
  2. Bir hatamız var.
  3. Yerelleştirilmiş soruşturma. Bunun nedeni, global değişkenin geçersiz veriler içermesidir.
  4. Global değişken, dahil edilen 150 dosyada 600 yerde kodla değiştirilir, 200 yerde işleve referans verilerek önemsiz bir şekilde değiştirilir. Eh, böyle bir g ... bir mimar onu yonttu ve bir grup nedojunov yazdı.
  5. Yukarıdaki kalabalık bir aydır böcek arıyordu, bulamadı, patron çıldırdı ve herkesi kovdu ve kıdemlinin yardımcısını aradı.
  6. Sidekick bu edepsizliğe baktı ve şöyle dedi: 250 tükürük. maaşım ve 75 tükürüğüm. iki küçüğüme ve bu saçmalığı altı ay içinde yeniden yazacağız ya da çöpe atacağız.

Ve şimdi doğru karar: Eğer koltuk değneklerinden kurtulamıyorsanız, sadece bir fonksiyon aracılığıyla global değişkeni değiştirmek.

  1. Toplam boyutu 200k satır olan (aslında küçük bir tane) birkaç yüz dosya içeren bir proje var.
  2. Bir hatamız var.
  3. Yerelleştirilmiş soruşturma. Bunun nedeni, global değişkenin geçersiz veriler içermesidir.
  4. Değişken atama işlevi, 150 içerme dosyasında 600 yerde kodla çağrılır. Eh, böyle bir g ... bir mimar onu yonttu ve bir grup nedojunov yazdı, çünkü hepsi aynı g ... o.
  5. Jun, işleve koşullu bir kesme noktası ekledi ve geçersiz değerler atandığında (2 dakika) çağrı yığınının durumunu gördü.
  6. Ayrıca, Haziran ayının Hinduizmine bağlı olarak, eleme ve hata ayıklama için bunu yazan lamer (muhtemelen o) hakkında basılamayan ifadeler, Haziran'ın Hinduizmine bağlı olarak yarım saatten 2 saate kadar.


 
Vladimir Simakov :

Global değişkenlerin kötülüğü ve sınıfın genel alanlarıyla ilgili.

Bak.

  1. Toplam boyutu 200k satır olan (aslında küçük bir tane) birkaç yüz dosya içeren bir proje var.
  2. Bir hatamız var.
  3. Yerelleştirilmiş soruşturma. Bunun nedeni, global değişkenin geçersiz veriler içermesidir.
  4. Global değişken, dahil edilen 150 dosyada 600 yerde kodla değiştirilir, 200 yerde, işleve referans verilerek önemsiz bir şekilde değiştirilir. Eh, böyle bir g ... bir mimar onu yonttu ve bir grup nedojunov yazdı.
  5. Yukarıdaki kalabalık bir aydır böcek arıyordu, bulamadı, patron çıldırdı ve herkesi kovdu ve kıdemlinin yardımcısını aradı.
  6. Yardımcı bu edepsizliğe baktı ve dedi ki: 250 tükürük. maaşım ve 75 tükürüğüm. iki küçüğüme ve bu saçmalığı altı ay içinde yeniden yazacağız ya da çöpe atacağız.

Ve şimdi doğru karar: Eğer koltuk değneklerinden kurtulamıyorsanız, sadece bir fonksiyon aracılığıyla global değişkeni değiştirmek.

  1. Toplam boyutu 200k satır olan (aslında küçük bir tane) birkaç yüz dosya içeren bir proje var.
  2. Bir hatamız var.
  3. Yerelleştirilmiş soruşturma. Bunun nedeni, global değişkenin geçersiz veriler içermesidir.
  4. Değişken atama işlevi, 150 içerme dosyasında 600 yerde kodla çağrılır. Eh, böyle bir g ... bir mimar onu yonttu ve bir grup nedojunov yazdı, çünkü hepsi aynı g ... o.
  5. Jun, işleve koşullu bir kesme noktası ekledi ve geçersiz değerler atandığında (2 dakika) çağrı yığınının durumunu gördü.
  6. Ayrıca, Haziran ayının Hinduizmine bağlı olarak, eleme ve hata ayıklama için bunu yazan lamer (muhtemelen o) hakkında basılamayan ifadeler, Haziran'ın Hinduizmine bağlı olarak yarım saatten 2 saate kadar.


Anladım. Global değişkenler kötüdür. Atasözünde olduğu gibi ... "Rus için iyi olan nedir ...".))))
 
Vasiliy Sokolov :
Hayır, yüzmediler. Bu örnek Veiled OOP'den alınmıştır. Ve burada tartıştığımız şey bunun bir alt kümesidir. Onlar. örnek, normalde yalnızca OOP'de çözülebilecek şeyler olduğunu gösterir. Fonksiyonlar tek başına yeterli olmayacaktır. Yani bu kendi içinde bir çelişki değil, iki yıldızlı bir problem.
Ama bu bir lise mezununun seviyesi ama şimdilik birinci sınıftayız.
Doğru. ~ 3000 satıra kadar programlar yazarken global değişkenleri güvenle kullanabiliriz. Ardından, Vladimir OOP'ye geçmek isterse, onları reddedecektir.) Yani?
 
Реter Konow :
Doğru. ~ 3000 satıra kadar programlar yazarken global değişkenleri güvenle kullanabiliriz. Ardından, Vladimir OOP'ye geçmek isterse, onları reddedecektir.) Yani?

Hayır böyle değil. Hemen doğru öğrenmeniz gerekir) Kötülük kötülük demektir dediler) Global bir değişkenin her beyanı (giriş parametreleriyle karıştırmayın, daha küçük olmaları da gerekir) açıkça gerekçelendirilmeli ve size hitap eden en tarafsız ifadeler kullanılarak yapılmalıdır. (örneğin nedodzhun vulgaris b ..)

 
Vladimir Simakov :

Hayır böyle değil. Hemen doğru öğrenmeniz gerekir) Kötülük kötülük demektir dediler) Global bir değişkenin her beyanı (giriş parametreleriyle karıştırmayın, daha küçük olmaları da gerekir) açıkça gerekçelendirilmeli ve size hitap eden en tarafsız ifadeler kullanılarak yapılmalıdır. (örneğin nedodzhun vulgaris b ..)

Global değişkenlerle ilgili tüm mesajları okudum ve bu tartışmadaki tüm katılımcıların bana tam olarak ne iletmek istediğini anladım. Global değişkenleri kullanmamaya çalışarak program kodu yazmayı öğreneceğim. Tüm yapıcı tavsiyeler için teşekkürler!

Saygılarımla, Vladimir.

 
Реter Konow :
Anladım. Global değişkenler kötüdür. Atasözünde olduğu gibi ... "Rus için iyi olan nedir ...".))))
Bu aslında doğru atasözü değil. Bu arada, tombul açısından, asla bizden daha zayıf değiller. Almanlardan bahsetmiyorum, genel olarak Anglo-Saksonlardan bahsediyorum. Gezdim, bilirsin, baktım. Türkiye'deki o Almanca konuşan yaşlıları asla unutmayacağım. 9:00 - 19:00 arası öğle yemeği molası vererek içtiler, sonra sadece havuz bar kapandı ve diğerlerine devam ettiler. Böylece, hangi dozları attıklarına baktım (Zadornov piz ... l) ve öğrencimin sertleşmesine rağmen ve bunun hakkında çok şey bildiğimi fark ettim, keşke ertesi gün öğle yemeğini böyle bir hızda hatırlayabilseydim)
 

MQL5 programlama dilini öğrenmeye devam ediyorum. Yine bu konudaki katılımcılardan gelen ipuçlarını dikkate alarak değiştirilmiş script kodunu yayınlıyorum. Komut dosyası tüm modlarda test edilmiştir. Herhangi bir sorun tespit edilmedi. Başlangıç olarak, minimum sayıda giriş parametresi uyguladım. Komut dosyası kodu İngilizce olarak yazılmıştır ve materyalin özümsenmesini kolaylaştırmak için koda yapılan yorumlar Rusça'dır. Bu senaryoda, daha önce söz verdiğim gibi, bir programlama okulunun 1. sınıf öğrencisinin erişebileceği bir sunumda her şeyi açıklamaya çalıştım.

Umarım şimdi tam olarak bu konunun katılımcılarının bana anlattığı gibi yaptım, ama yanılıyor olabilirim.

Saygılarımla, Vladimir.

 //+------------------------------------------------------------------+
//|                                                Learning_MQL5.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright    "Copyright 2020, MetaQuotes Software Corp."
#property link          "https://www.mql5.com"
#property description "Скрипт подводит итог обучения языку программирования MQL5. В зависимости от"
#property description "входных параметров печатает во вкладке \"Эксперт\" торгового терминала два"
#property description "сообщения на русском языке: \"Я выучу язык MQL5!\" или \"Я не выучу язык MQL5!\""
#property description "Код скрипта написан на основе примера, приведенного Valeriy Yastremskiy на сайте"
#property description "MQL5, в теме \"Самообучение языку MQL5 с полного нуля\"."
#property description "======================================================"
#property description "Ссылка на пример https://www.mql5.com/ru/forum/352460/page30#comment_18646826"
//---
#property version      "1.00"                //версия скрипта 1.00
//---
#property script_show_inputs                //выводить окно со свойствами перед запуском скрипта 
//--- Зададим входные параметры скрипта:
input ushort Period_learning= 500 ;         //Полный период обучения (в днях)
input ushort Days_passed= 10 ;               //Сколько дней прошло с начала обучения (в днях)
input bool    Patience= true ;               //Терпение (true - достаточно; false - не достаточно)
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()                        //старт работы скрипта
  {
   /* Зададим условие для работы скрипта. Если:
      1. значение функции "имею время" будет равно значению истина (true)
      2. и значение функции "имею терпение" будет равно значению истина (true)
   */
   if (have_time()== true && have_patience()== true )
     {
       Print ( "Я выучу язык MQL5!" );     //выводим сообщение "Я выучу язык MQL5!"
     }
   else //в противном случае
     {
       Print ( "Я не выучу язык MQL5!" ); //выводим сообщение "Я не выучу язык MQL5!"
     }
  }
//+------------------------------------------------------------------+
//| have_time function (функция "имею_время")                        |
//+------------------------------------------------------------------+
bool have_time()          //создаём функцию "имею_время" и присвоим тип данных bool
  {
   /* создаём переменную enough_time (достаточно времени), где bool - логическое значение:
      истина (true) или ложь (false) и предопределяем её значение равное false
   */
   bool enough_time= false ;
   /* Если:
      1. значение входного параметра Period_learning больше нуля
      2. и значение входного параметра Days_passed больше или равно значения входного параметра Period_learning
   */
   if (Period_learning> 0 && Days_passed>=Period_learning)
     {
      enough_time= true ;   //то значение enough_time (достаточно времени) будет равно истине (true)
     }
   else                    //в противном случае
     {
      enough_time= false ;   //значение enough_time (достаточно времени) будет равно ложь (false)
     }
   return (enough_time);   //возвращаем значение "достаточно времени" в функцию "имею время"
  }
//+------------------------------------------------------------------+
//| have_patience function (функция "имею_терпение")                 |
//+------------------------------------------------------------------+
bool have_patience()           //создаём функцию "имею_терпение" и присвоим тип данных bool
  {
   /* создаём переменную enough_patience (достаточно терпения), где bool - логическое значение:
      истина (true) или ложь (false) и предопределяем её значение равное false
   */
   bool enough_patience= false ;
   enough_patience=Patience;   //задаём для переменной enough_patience (достаточно терпения) значение равное
                               //входному параметру "Терпение" (Patience): истина или ложь
   return (enough_patience);     //возвращаем значение "достаточно терпения" в функцию "имею терпение"
  }
//+------------------------------------------------------------------+
Neden: