MQL5 언어를 처음부터 자가 학습 - 페이지 46

 
그건 그렇고, 나는 내 자신의 도전에서 나를 견제 할 예를 알고 있습니다. 그러나 명백한 이유 때문에 나는 그것에 대해 쓰지 않을 것입니다.
 
Vasiliy Sokolov :
그건 그렇고, 나는 내 자신의 도전에서 나를 견제 할 예를 알고 있습니다. 그러나 명백한 이유 때문에 나는 그것에 대해 쓰지 않을 것입니다.
항해 ....)))))
 
Реter Konow :
항해 ....)))))
아니요, 그들은 수영하지 않았습니다. 이 예는 Veiled OOP에서 가져온 것입니다. 그리고 우리가 여기서 논의하는 것은 그것의 부분집합입니다. 저것들. OOP에서만 정상적으로 풀 수 있는 것들이 있음을 보여주는 예입니다. 기능만으로는 충분하지 않습니다. 따라서 이것은 자기모순이 아니라 별 2개 문제입니다.
하지만 이것은 고졸 수준이지만 지금은 1학년입니다.
 

전역 변수 의 해악에 관하여, 그리고 클래스의 공개 필드와 함께.

바라보다.

  1. 총 크기가 200,000줄(사실 작은 것)인 수백 개의 포함된 파일이 있는 프로젝트가 있습니다.
  2. 버그가 있습니다.
  3. 현지화된 조사. 이는 전역 변수에 잘못된 데이터가 포함되어 있기 때문입니다.
  4. 전역 변수는 150개의 인클루드 파일 중 600개의 위치에서 코드로 변경되고, 200개의 위치에서 함수를 참조하여 전달하여 사소하지 않게 변경됩니다. 글쎄, 그런 g ... 건축가가 그것을 조각했고 nedojunov 그룹이 썼습니다.
  5. 위의 군중은 한 달 동안 버그를 찾고, 찾지 못했고, 상사는 겁에 질려 모두를 해고하고 선배의 조수를 불렀습니다.
  6. 측근은 이 외설을 보고 말했다: 250 sput. 내 급여와 75 스퍼트. 내 두 후배들에게, 그리고 우리는 6개월 안에 이 쓰레기를 다시 쓰거나 아예 버릴 것입니다.

이제 올바른 결정을 내리십시오. 목발에서 벗어날 수 없다면 함수를 통해서만 전역 변수를 변경하는 것입니다.

  1. 총 크기가 200,000줄(사실 작은 것)인 수백 개의 포함된 파일이 있는 프로젝트가 있습니다.
  2. 버그가 있습니다.
  3. 현지화된 조사. 이는 전역 변수에 잘못된 데이터가 포함되어 있기 때문입니다.
  4. 변수 할당 함수는 150개의 포함 파일 중 600개의 위치에 있는 코드에 의해 호출됩니다. 글쎄, 그런 g ... 건축가가 그것을 조각했고 nedojunov 그룹이 썼습니다. 왜냐하면 그것은 모두 같은 g ... o이기 때문입니다.
  5. Jun은 함수에 조건부 중단점을 삽입하고 유효하지 않은 값이 할당된 시점(2분)의 호출 스택 상태를 확인했습니다.
  6. 또한, 제거 및 디버깅을 위해 6월의 힌두교에 따라 30분에서 2시간까지 이것을 쓴 lamer에 대한 6월의 인쇄할 수 없는 진술.


 
Vladimir Simakov :

전역 변수 의 해악에 관하여, 그리고 클래스의 공개 필드와 함께.

바라보다.

  1. 총 크기가 200,000줄(사실 작은 것)인 수백 개의 포함된 파일이 있는 프로젝트가 있습니다.
  2. 버그가 있습니다.
  3. 현지화된 조사. 이는 전역 변수에 잘못된 데이터가 포함되어 있기 때문입니다.
  4. 전역 변수는 150개의 인클루드 파일 중 600개소의 코드로 변경되고, 200개소의 코드는 함수를 참조하여 전달함으로써 사소하지 않게 변경됩니다. 글쎄, 그런 g ... 건축가가 그것을 조각했고 nedojunov 그룹이 썼습니다.
  5. 위의 군중은 한 달 동안 버그를 찾고, 찾지 못했고, 상사는 겁에 질려 모두를 해고하고 선배의 조수를 불렀습니다.
  6. 측근은 이 외설을 보고 말했다: 250 sput. 내 급여와 75 스퍼트. 내 두 후배들에게, 그리고 우리는 6개월 안에 이 쓰레기를 다시 쓰거나 아예 버릴 것입니다.

이제 올바른 결정을 내리십시오. 목발에서 벗어날 수 없다면 함수를 통해서만 전역 변수를 변경하는 것입니다.

  1. 총 크기가 200,000줄(사실 작은 것)인 수백 개의 포함된 파일이 있는 프로젝트가 있습니다.
  2. 버그가 있습니다.
  3. 현지화된 조사. 이는 전역 변수에 잘못된 데이터가 포함되어 있기 때문입니다.
  4. 변수 할당 함수는 150개의 포함 파일 중 600개의 위치에 있는 코드에 의해 호출됩니다. 글쎄, 그런 g ... 건축가가 그것을 조각했고 nedojunov 그룹이 썼습니다. 왜냐하면 그것은 모두 같은 g ... o이기 때문입니다.
  5. Jun은 함수에 조건부 중단점을 삽입하고 유효하지 않은 값이 할당된 시점(2분)의 호출 스택 상태를 확인했습니다.
  6. 또한, 제거 및 디버깅을 위해 6월의 힌두교에 따라 30분에서 2시간까지 이것을 쓴 lamer에 대한 6월의 인쇄할 수 없는 진술.


이해했다. 전역 변수는 나쁘다. 속담에 있듯이 ... "러시아인에게 좋은 것은 ...".))))
 
Vasiliy Sokolov :
아니요, 그들은 수영하지 않았습니다. 이 예는 Veiled OOP에서 가져온 것입니다. 그리고 우리가 여기서 논의하는 것은 그것의 부분집합입니다. 저것들. OOP에서만 정상적으로 풀 수 있는 것들이 있음을 보여주는 예입니다. 기능만으로는 충분하지 않습니다. 따라서 이것은 자기모순이 아니라 별 2개 문제입니다.
하지만 이것은 고졸 수준이지만 지금은 1학년입니다.
권리. 최대 3000줄까지 프로그램을 작성하는 동안 전역 변수를 안전하게 사용할 수 있습니다. 그런 다음 Vladimir가 OOP로 전환하기를 원하면 거부할 것입니다.) 그래서?
 
Реter Konow :
권리. 최대 3000줄까지 프로그램을 작성하는 동안 전역 변수를 안전하게 사용할 수 있습니다. 그런 다음 Vladimir가 OOP로 전환하기를 원하면 거부할 것입니다.) 그래서?

아니 이런 식으로. 바로 배울 필요가 있습니다) 그들은 악이 악을 의미한다고 말했습니다) 전역 변수 의 각 선언(입력 매개변수와 혼동하지 마십시오. 더 작아야 함)은 명확하게 정당화되어야 하며 가장 공정한 진술을 사용하여 작성되어야 합니다. (예: nedodzhun vulgaris b ..)

 
Vladimir Simakov :

아니 이런 식으로. 바로 배울 필요가 있습니다) 그들은 악이 악을 의미한다고 말했습니다) 전역 변수 의 각 선언(입력 매개변수와 혼동하지 마십시오. 더 작아야 함)은 명확하게 정당화되어야 하며 가장 공정한 진술을 사용하여 작성되어야 합니다. (예: nedodzhun vulgaris b ..)

나는 전역 변수에 대한 모든 메시지를 읽었고 이 토론의 모든 참가자가 나에게 전달하고자 하는 것이 정확히 무엇인지 이해했습니다. 전역 변수를 사용하지 않으려고 노력하면서 프로그램 코드를 작성하는 방법을 배울 것입니다. 모든 건설적인 조언에 감사드립니다!

안부 인사를 전합니다. 블라디미르.

 
Реter Konow :
이해했다. 전역 변수는 악입니다. 속담에 있듯이 ... "러시아인에게 좋은 것은 ...".))))
이것은 실제로 올바른 속담이 아닙니다. 그건 그렇고, 통통하다는 점에서, 그들은 결코 우리보다 약하지 않습니다. 나는 독일인에 대해 말하는 것이 아니라 일반적으로 앵글로색슨에 대해 말하는 것입니다. 여행, 알다시피, 보았다. 나는 터키에서 독일어를 하는 그 노인들을 결코 잊지 못할 것입니다. 9시부터 19시까지 점심시간 쉬면서 술을 마셨고, 그 다음에는 풀바만 문을 닫고 다른 사람들과 계속 이어갔다. 그래서 나는 그들이 던진 복용량을 보았고 (Zadornov piz ... l) 내 학생이 단단해졌지만 그것에 대해 많이 알고 있음에도 불구하고 다음 날 점심을 그런 속도로 기억했으면 좋겠다는 것을 깨달았습니다.
 

계속해서 MQL5 프로그래밍 언어를 공부하고 있습니다. 이 주제의 참가자들의 팁을 고려하여 수정된 스크립트 코드를 다시 게시합니다. 스크립트는 모든 모드에서 테스트되었습니다. 문제가 확인되지 않았습니다. 우선 최소한의 입력 매개변수를 적용했습니다. 스크립트 코드는 영어로 작성되었으며 코드에 대한 주석은 자료의 동화를 용이하게 하기 위해 러시아어로 작성되었습니다. 이 대본에서는 앞서 약속한 대로 프로그래밍 학교 1학년 학생이 볼 수 있는 프레젠테이션에서 모든 것을 설명하려고 했습니다.

나는 이제 이 주제의 참가자들이 나에게 설명한 대로 정확하게 하기를 희망하지만 내가 틀릴 수도 있습니다.

안부 인사를 전합니다. 블라디미르.

 //+------------------------------------------------------------------+
//|                                                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);     //возвращаем значение "достаточно терпения" в функцию "имею терпение"
  }
//+------------------------------------------------------------------+