Объявление переменных за циклом или внутри цикла? - страница 8

 
Alexey Viktorov:
Не возможно, а точно не прав. Только один пример: В цикле перебираешь открытые позиции. Получаешь тикет позиции, используешь его для получения других свойств позиции. Вариантов два, либо в каждую функцию получения свойства позиции вставлять PositionGetTicket(i) либо один раз записать его в переменную и использовать её. Но ведь при выходе из цикла этот тикет уже никому не нужен... зачем эту переменную объявлять в теле функции OnTick() или ещё интересней на глобальном уровне?

Наверное, я не совсем правильно выразился....

Само собой в OnTick() они не нужны. Не знаю, возможно правильно выносить циклы (и необходимые там переменные) в функции?

П.С. И вообще, любой прогер сам должен знать где какая переменная ему нужна и самостоятельно определять область её видимости......
 

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

 
Vict:

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

Цi размауляеце Вы на беларускай мове? Не? А чаму? Беларуская мова значна блiжэй да стараславянскай. Будзем наблiжать рускую мову да стараславянскай? Вiдавочна, што, на першае, яе патрэбна наблiжать да беларускай...

Сча меня опять будут поливать д... грязью, но, в который раз, СИ и MQL - это разные языки! Не смотря на то, что один был основан на другом....

 
Сергей Таболин:

Наверное, я не совсем правильно выразился....

Само собой в OnTick() они не нужны. Не знаю, возможно правильно выносить циклы (и необходимые там переменные) в функции?

П.С. И вообще, любой прогер сам должен знать где какая переменная ему нужна и самостоятельно определять область её видимости......

Вот золотые слова.

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

 
Alexey Viktorov:

А выносить цикл во внешнюю функцию, если он используется только один раз в коде, это кому как позволяет религия.

подкину слов в Ваш лексикон - эта религия называется SOLID 

 

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

Исходник в прикрепленном файле.

string predictor_names[]={"Time_RSI_ZZ_00","rPeresek_Down","Time_ZZ_02","Speed_1_ZZ_Proc_04"...}

struct sRule
  {
   int               predictor_id;
   bool              more_eq; 
   double            value; 
  };
//Лист дерева(набор правил)
struct sLeaf_r
  {
   int               rules_count;              //Сколько правил
   sRule             rules[32];  //Все правила листа
   double            result_leaf;//Результат листа
  };
//Количество всех листьев 164912
sLeaf_r           leaf_rs[]=
  {
     {3,{{0,0,21.5},{1,1,0.5},{2,0,15.5}},0.0},
     {5,{{0,0,21.5},{1,1,0.5},{2,1,15.5},{3,1,6.5},{4,0,-4.5}},-1.0},
......
......
//Очень много данных
  }

void OnStart()
  {

  }

Структуры полностью статичные, массив leaf_rs можно полностью выкинуть.  OnStart()  пустой. В итоге размер скомпилированного файла почти 2 мегабайта.

Файлы:
test_3.zip  418 kb
 
Igor Makanu:

подкину слов в Ваш лексикон - эта религия называется SOLID 

Игорь, ваш отец не сколько старше меня? Думаю не больше чем лет на 5. Не ужели он ещё в состоянии увеличивать свой лексикон? Или вы слишком молоды? Не ищите скрытый смысл в моих словах.
 
Alexey Viktorov:

........

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

Я уже как-то спрашивал, но ответа так и не дождался. Именно для таких случаев, чтобы не пользоваться "своей" религией, есть ли штатная возможность уничтожить переменную?

Всё же лично мне не нравиться объявлять переменные в цикле. Я предпочитаю их объявлять до него, а вот как после их уничтожить?...... Вот поэтому и функция. После выхода из неё внутренние переменные уничтожаются. (???)

Про ООП ничего сказать не могу. Просто не понимаю зачем это надо ))))))) Устарел, наверное ))))))))))

 
Сергей Таболин:

Я уже как-то спрашивал, но ответа так и не дождался. Именно для таких случаев, чтобы не пользоваться "своей" религией, есть ли штатная возможность уничтожить переменную?

Всё же лично мне не нравиться объявлять переменные в цикле. Я предпочитаю их объявлять до него, а вот как после их уничтожить?...... Вот поэтому и функция. После выхода из неё внутренние переменные уничтожаются. (???)

Про ООП ничего сказать не могу. Просто не понимаю зачем это надо ))))))) Устарел, наверное ))))))))))

Не въехал, это?

if (true) {
        Type var;
        for (...) {
                var.use();
        }
}

Сомневаюсь, что не знали.

 
Alexey Viktorov:
Игорь, ваш отец не сколько старше меня? 

1953-2008 отец

1953-2019 тесть

Причина обращения: