Я не гуру, но тут, на мой скромный взгляд, объявление переменных в цикле - это вооще ХЗ (и это уже не Хто Знает) !!!
Одно дело - функция, даже локальный кусок кода, а циклы....
Возможно, я и не прав ))))))))
Не возможно, а точно не прав. Только один пример: В цикле перебираешь открытые позиции. Получаешь тикет позиции, используешь его для получения других свойств позиции. Вариантов два, либо в каждую функцию получения свойства позиции вставлять 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.
Просто встречал кучу людей, которые думают, что компилятор обнуляет локальные переменные так же, как глобальные.
А варнингов компилятор не выдает
выдает, стринг и принт не показатель работы с переменными
'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
}
.