Я не гуру, но тут, на мой скромный взгляд, объявление переменных в цикле - это вооще ХЗ (и это уже не Хто Знает) !!!
Одно дело - функция, даже локальный кусок кода, а циклы....
Возможно, я и не прав ))))))))
Не возможно, а точно не прав. Только один пример: В цикле перебираешь открытые позиции. Получаешь тикет позиции, используешь его для получения других свойств позиции. Вариантов два, либо в каждую функцию получения свойства позиции вставлять PositionGetTicket(i) либо один раз записать его в переменную и использовать её. Но ведь при выходе из цикла этот тикет уже никому не нужен... зачем эту переменную объявлять в теле функции OnTick() или ещё интересней на глобальном уровне?
я думаю, что первый вариант, ибо нет лишних переменных, они мало того, что используют память, так и по мне, загромождают код - читать больше, но зависит от вызываемых функций имхо, если функции редко употребляются, то иногда читабельнее будет если обьявить переменную с именем по смыслу выполняемой задачи.... в общем творческая это задача )))
но в общем нечего кого слушать, как удобно так и пишем - т.е. используем возможности языка для своего удобства
ЗЫ: глянул примеры от Майкрософт, стиль в основном - объявления сразу при использовании переменных, в основном получается локальная область видимости, но без фанатизма ))
void SimpleImage::CalculateDrawingRect()
{
// Load our bitmap if necessaryif (nullptr == m_bitmap)
{
if (FAILED(LoadBitmapFromShellItem()))
{
return;
}
}
// Calculate bitmap rectanglefloatboundingWidth = m_boundingRect.right - m_boundingRect.left;
float boundingHeight = m_boundingRect.bottom - m_boundingRect.top;
float width = Direct2DUtility::GetRectWidth(m_clipRect);
float height = Direct2DUtility::GetRectHeight(m_clipRect);
if (!m_isHorizontal)
{
// Swap width and height to calculate boundariesfloat widthTemp = width;
width = height;
height = widthTemp;
}
if (width > boundingWidth)
{
// Width is larger than bounding box. Scale width to fitfloat scale = boundingWidth / width;
width *= scale;
height *= scale;
}
This repo is the official home of .NET on GitHub. It's a great starting point to find many .NET OSS projects from Microsoft and the community, including many that are part of the .NET Foundation.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Просто встречал кучу людей, которые думают, что компилятор обнуляет локальные переменные так же, как глобальные.
А варнингов компилятор не выдает
выдает, стринг и принт не показатель работы с переменными
'tst.mq5' tst.mq5 1 1
possible use of uninitialized variable 'c' tst.mq5 16 10
possible use of uninitialized variable 'e' tst.mq5 20 17
code generated 1 1
0 error(s), 2 warning(s), 526 msec elapsed 1 3
time = 1018
sum = 894782460
time = 371
sum = 894782460
Х.з. почему, но мкл сильно обгоняет (и более затейливые варианты с rand()).
А для меня очевидно - выносить за цикл.
Просто встречал кучу людей, которые думают, что компилятор обнуляет локальные переменные так же, как глобальные.
А варнингов компилятор не выдает
Или .... ну я не знаю. У меня так матерится при каждом удобном случае.... ))))))
Или .... ну я не знаю. У меня так матерится при каждом удобном случае.... ))))))
time = 1018
sum = 894782460
time = 371
sum = 894782460
Х.з. почему, но мкл сильно обгоняет (и более затейливые варианты с rand()).
А для меня очевидно - выносить за цикл.
Я не гуру, но тут, на мой скромный взгляд, объявление переменных в цикле - это вооще ХЗ (и это уже не Хто Знает) !!!
Одно дело - функция, даже локальный кусок кода, а циклы....
Возможно, я и не прав ))))))))
У Вас нецензурная версия компилятора)
И я этому рад ))))))))))) Хотя иногда .... лучше бы он молчал )))))))))))))))))))))))))))))))
Если пошли такие дебаты - хочу спросить Гуру.
Что "правильнее"(оптимальнее и читабельней):
Или
если порядок следования i безразличен?
Я не гуру, но тут, на мой скромный взгляд, объявление переменных в цикле - это вооще ХЗ (и это уже не Хто Знает) !!!
Одно дело - функция, даже локальный кусок кода, а циклы....
Возможно, я и не прав ))))))))
Если пошли такие дебаты - хочу спросить Гуру.
Что "правильнее"(оптимальнее и читабельней):
Или
если порядок следования i безразличен?
я думаю, что первый вариант, ибо нет лишних переменных, они мало того, что используют память, так и по мне, загромождают код - читать больше, но зависит от вызываемых функций имхо, если функции редко употребляются, то иногда читабельнее будет если обьявить переменную с именем по смыслу выполняемой задачи.... в общем творческая это задача )))
но в общем нечего кого слушать, как удобно так и пишем - т.е. используем возможности языка для своего удобства
ЗЫ: глянул примеры от Майкрософт, стиль в основном - объявления сразу при использовании переменных, в основном получается локальная область видимости, но без фанатизма ))
https://github.com/microsoftЕсли пошли такие дебаты - хочу спросить Гуру.
Что "правильнее"(оптимальнее и читабельней):
Или
если порядок следования i безразличен?
Если безразличен то
int i = Bars();
while(i-- > 0)
{
// code
}
.