Обсуждение статьи "Изучение MQL5 — от новичка до профи (Часть III): Сложные типы данных и подключаемые файлы"

 

Опубликована статья Изучение MQL5 — от новичка до профи (Часть III): Сложные типы данных и подключаемые файлы:

Статья является третьей в серии материалов об основных аспектах программирования на MQL5. Здесь описываются сложные типы данных, которые не были описаны в предыдущей статье, включая структуры, объединения, классы и тип данных "функция". Также рассказано, как добавить модульности нашей программе с помощью директивы препроцессора #include.

В этой статье я опишу, как программист может создавать сложные типы данных, такие как:

  • структуры;
  • объединения (union);
  • классы (на начальном уровне);
  • типы, позволяющие использовать имя переменной как функцию. Это позволяет, в том числе, передавать функции в виде параметров другим функциям.

Также в статье рассказано, как подключать внешние текстовые файлы с помощью директивы препроцессора #include, чтобы обеспечить нашей программе модульность и гибкость. Напомню, что данные можно организовывать по-разному, но компилятор всегда должен знать, сколько памяти потребуется нашей программе, и поэтому прежде, чем использовать данные, их нужно описать, указав их тип.


Автор: Oleh Fedorov

 

Отношу себя к новичку, который изучил азы в программировании. Прочитал Вашу очередную статью и сделал вывод: новичок с полным отсутствием каких-либо знаний ничего не поймёт из этой статьи. Это моё личное мнение, не претендующее на истину в последней инстанции.

Возьмём для примера раздел статьи Структуры. Начало хорошее и достаточно понятное. Вы рассказали для чего нужна структура и показали как её создать. А затем бабах и новый код!

IntradayTime dealEnterTime;

dealEnterTime.hours = 8;
dealEnterTime.minutes = 15;
dealEnterTime.timeCodeString = "GMT+2";

Специально выделил эту часть кода. Вот что должен понять новичок с нулевыми знаниями из этой строки? Что это такое для него? Мне-то уже понятно, а вот для новичка с полным отсутствием знаний это очередной непонятный фрагмент кода. Поэтому желательно расписывать и полностью разжёвывать каждую строчку. Иначе получается, что эта статья не для новичков, а для уже продвинутых программистов.

С уважением, Владимир.

 
MrBrooklin #:

Отношу себя к новичку, который изучил азы в программировании. Прочитал Вашу очередную статью и сделал вывод: новичок с полным отсутствием каких-либо знаний ничего не поймёт из этой статьи. Это моё личное мнение, не претендующее на истину в последней инстанции.

Возьмём для примера раздел статьи Структуры. Начало хорошее и достаточно понятное. Вы рассказали для чего нужна структура и показали как её создать. А затем бабах и новый код!

Специально выделил эту часть кода. Вот что должен понять новичок с нулевыми знаниями из этой строки? Что это такое для него? Мне-то уже понятно, а вот для новичка с полным отсутствием знаний это очередной непонятный фрагмент кода. Поэтому желательно расписывать и полностью разжёвывать каждую строчку. Иначе получается, что эта статья не для новичков, а для уже продвинутых программистов.

С уважением, Владимир.

Мне кажется - или именно эту структуру я создавал тремя строками раньше? И две строки назад объяснил, что это - тип данных? И это должно значить, что использовать этот тип нужно так же, как все остальные? (Правда, тут уже логика должна подключиться, да ;-)

Хотя, вероятно, Вы и правы, комментарий как минимум к типу не помешал бы... Спасибо.

 
void OnStart()
  
  
  class PrivateAndPudlic
  }
  private:
     int a;
  public:
     int b;
   }; 
 PrivateAndPudlic myVariable;
 
//myVariable.a = 5; //Ошибка компилятора!

 myVariable.b = 10; //Всё в порядке, так можно

Выдает ошибку при компиляции. Подскажите пожалуйста, что не так, где ошибка?

 
AKHMED Asmalov #:
void OnStart()
  
  
  class PrivateAndPudlic
  }
  private:
     int a;
  public:
     int b;
   }; 
 PrivateAndPudlic myVariable;
 
//myVariable.a = 5; //Ошибка компилятора!

 myVariable.b = 10; //Всё в порядке, так можно

Выдает ошибку при компиляции. Подскажите пожалуйста, что не так, где ошибка?

Извините за задержку с ответом.

В этом примере код не совсем полный. Для того, чтобы он заработал, нужно переменную myVariable использовать где-то внутри функции. Например:

  class PrivateAndPudlic
   {
  private:
     int a;
  public:
     int b;
   }; 

 PrivateAndPudlic myVariable; // Глобальная переменная

void OnStart(){ // Все вызовы действий (в данном случае - присваивание) должны происходить только внутри функций
  //myVariable.a = 5; //Ошибка компилятора!

   myVariable.b = 10; //Всё в порядке, так можно
}

Ну, и скобку при перепечатке Вы развернули (вместо открывающей "{" поставили закрывающую "}" ) ;-)

 
Oleh Fedorov #:

Извините за задержку с ответом.

В этом примере код не совсем полный. Для того, чтобы он заработал, нужно переменную myVariable использовать где-то внутри функции. Например:

Ну, и скобку при перепечатке Вы развернули (вместо открывающей "{" поставили закрывающую "}" ) ;-)

Ну, или как описано в статье:

void OnStart(){

class PrivateAndPudlic
 {
  private:
     int a;
  public:
     int b;
   }; 
 PrivateAndPudlic myVariable;
 
//myVariable.a = 5; //Ошибка компилятора!

 myVariable.b = 10; //Всё в порядке, так можно

}