Структуры. Научите пожалуйста. - страница 2

 
Valeriy Yastremskiy #:

Неплохой пример возможностей структур. В них можно объявлять массивы, а потом массивы структуры) 

Просто надо понять, что такое тип переменных. Типы могут быть инт, дабл, стринг, массив, структура, класс. И структура, это описание типа данных. Так же как и инт, это описание целочисленных переменных.


Хороший пример. Но это в том случае откуда это взято, примерно как грядку морковки у себя на даче 6 соток, обрабатывать трактором…

А пример ещё проще, так это, как чесать правое ухо мизинцем левой ноги.

Но лучше пальцем правой руки…


 
Alexey Viktorov #:

Хороший пример. Но это в том случае откуда это взято, примерно как грядку морковки у себя на даче 6 соток, обрабатывать трактором…

А пример ещё проще, так это, как чесать правое ухо мизинцем левой ноги.

Но лучше пальцем правой руки…


Не, там тема была как однорядный буфер индикатора засунуть в многоразмерный массив. Хорошее решение по мне.

 
Valeriy Yastremskiy #:

Не, там тема была как однорядный буфер индикатора засунуть в многоразмерный массив. Хорошее решение по мне.

Да я не против. Наглядный пример возможностей и более ничего. Трактор на 6ти сотках тоже нормально показывает свои возможности.

 
Petr Zharuk:
...и как я могу применять в своих работах.

Да просто в начале хотя-бы для читаемости и объединения взаимосвязанных данных в один объект.

Видел на форуме очень древнюю тему/статью (10+ лет), где свойства ордеров в многомерный double массив собирали, попутно приводя типы данных при каждом обращении. Попробуйте сделать так, после чего объявите массив структур с переменными .ticket, .time, .stopLoss... С чем вам будет удобней работать?
В добавок в сборе ордеров в массив структур есть один огромный плюс - вы их, блин, таки начинаете собирать, а не делать вот так (чужой код, который прислали доработать):

int TOOC_Open()
 {
  int tooc;
  for(int a=0;a<OrdersTotal();a++) 
   if(OrderSelect(a,0,0))
    if(OrderSymbol()==Symbol() && OrderType()<=1 && OrderMagicNumber()==MagicNumber)
     tooc++;
  return(tooc);
 }
 
int TOOC_All()
 {
  int tooc;
  for(int a=0;a<OrdersTotal();a++) 
   if(OrderSelect(a,0,0))
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
     tooc++;
  return(tooc);
 }
 
int TOOCOnComment(string TradeComment)
 {
  int tooc;
  for(int a=0;a<OrdersTotal();a++) 
   if(OrderSelect(a,0,0))
    if(OrderSymbol()==Symbol() && OrderComment()==TradeComment && OrderMagicNumber()==MagicNumber)
     tooc++;
  return(tooc);
 }

Другой пример: MqlTick, MqlRates, MqlDatetime. Попробуйте использовать их в работе. После чего попробуйте от них отказаться: делайте то же самое, но для каждого элемента структуры объявляйте отдельный массив. Особенно убедительно получится, когда у вас рядом будут лежать time[] баров и time[] тиков на ряду с десятком других массивов. Даже проявив чудеса нейминга, все равно можно будет по невнимательности вписать в time[] тиков индекс бара, например.

 
Vladislav Boyko #:

Да просто в начале хотя-бы для читаемости и объединения взаимосвязанных данных в один объект.

Видел на форуме очень древнюю тему/статью (10+ лет), где свойства ордеров в многомерный double массив собирали, попутно приводя типы данных при каждом обращении. Попробуйте сделать так, после чего объявите массив структур с переменными .ticket, .time, .stopLoss... С чем вам будет удобней работать?
В добавок в сборе ордеров в массив структур есть один огромный плюс - вы их, блин, таки начинаете собирать, а не делать вот так (чужой код, который прислали доработать):

Другой пример: MqlTick, MqlRates, MqlDatetime. Попробуйте использовать их в работе. После чего попробуйте от них отказаться: делайте то же самое, но для каждого элемента структуры объявляйте отдельный массив. Особенно убедительно получится, когда у вас рядом будут лежать time[] баров и time[] тиков на ряду с десятком других массивов. Даже проявив чудеса нейминга, все равно можно будет по невнимательности вписать в time[] тиков индекс бара, например.

Еще одно: передача параметров в функции. Структуры сокращают количество передаваемых в функцию параметров кратно количеству членов структуры. Здесь есть ребята, которые считают огромным грехом передавать в функцию больше 4х параметров. Как этого добиться без структур?

Вариант "все переменные сделать глобальными" не предлагать :D

 
Vladislav Boyko #:

Еще одно: передача параметров в функции. Структуры сокращают количество передаваемых в функцию параметров кратно количеству членов структуры. Здесь есть ребята, которые считают огромным грехом передавать в функцию больше 4х параметров. Как этого добиться без структур?

Вариант "все переменные сделать глобальными" не предлагать :D

завернуть тогда в класс)

 
lynxntech #:

завернуть тогда в класс)

Ну это уже следующий уровень. Если есть трудности с пониманием назначения структур, то в ооп пока рановато)

 
lynxntech #:

завернуть тогда в класс)

Классы - эволюционированные структуры  

 
Petr Zharuk:

Мне лучше всего доходят ассоциативные примеры. Попробую рассказать, что такое структуры, ассоциацией.

Valeriy Yastremskiy выше уже написал, что по сути структура это тип данных. 

Представим, что данные это одежда. И есть разные типы одежды, трусы, носки, ̶п̶р̶о̶т̶и̶в̶о̶г̶а̶з̶  , куртка.

Мы можем создавать переменные с этими разными типами данных и инициализировать их

носки шертяные_41 = 2;

носки  ХБ = 10;

носки  в_полосочку = 1;

куртка абырвол = 8;

то есть тип данных "носки" а дальше название переменной и чему она равна(инициализация).

Так вот структура, это тип данных, который содержит в себе несколько других типов данных. Исходя из моего примера, структура это комплект одежды.

struct разная_одежда

  {

          носки   шертяные_41 ;

          носки   ХБ ;

          куртка абырвол ;

          куртка  abibas;

  };

Вот получился новый тип данных  " разная одежда" .  Такой же тип данных как и int, double   или как я писал носки, трусы.

Объявляется переменная структуры ток же как и другие :


разная_одежда       м_рОдежда;


инициализация структуры  будет выглядеть так:

м_рОдежда . шертяные_41  = 5;

м_рОдежда . ХБ = 15;

м_рОдежда . абырвол  = 3;

м_рОдежда. abibas = 8;


P.S.  Я когда учился мне подобное объяснение лучше всего зашло, поэтому делюсь, вдруг пригодится.

 
Aleksandr Slavskii #:

Мне лучше всего доходят ассоциативные примеры. Попробую рассказать, что такое структуры, ассоциацией.

Valeriy Yastremskiy выше уже написал, что по сути структура это тип данных. 

Представим, что данные это одежда. И есть разные типы одежды, трусы, носки, ̶п̶р̶о̶т̶и̶в̶о̶г̶а̶з̶  , куртка.

Мы можем создавать переменные с этими разными типами данных и инициализировать их

носки шертяные_41 = 2;

носки  ХБ = 10;

носки  в_полосочку = 1;

куртка абырвол = 8;

то есть тип данных "носки" а дальше название переменной и чему она равна(инициализация).

Так вот структура, это тип данных, который содержит в себе несколько других типов данных. Исходя из моего примера, структура это комплект одежды.

struct разная_одежда

  {

          носки   шертяные_41 ;

          носки   ХБ ;

          куртка абырвол ;

          куртка  abibas;

  };

Вот получился новый тип данных  " разная одежда" .  Такой же тип данных как и int, double   или как я писал носки, трусы.

Объявляется переменная структуры ток же как и другие :


разная_одежда       м_рОдежда;


инициализация структуры  будет выглядеть так:

м_рОдежда . шертяные_41  = 5;

м_рОдежда . ХБ = 15;

м_рОдежда . абырвол  = 3;

м_рОдежда. abibas = 8;


P.S.  Я когда учился мне подобное объяснение лучше всего зашло, поэтому делюсь, вдруг пригодится.

Да, поддерживаю, ассоциативно понятнее. 
Осталось осознать применение в нашей с вами сфере )