Учёба. Классы. Нужна помощь. - страница 9

 
Ihor Herasko #:

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

Но ведь 5 секунд только при первом ознакомлении. 

Я до того как, встретил такую запись и пользуюсь ей

for(int i = OrdersTotal(); i-- > 0;)

Вот при попытке понять это я потратил секунд 10-12. А вариант fxsaber`a уже никаких задержек…

 
Alexey Viktorov #:

Но ведь 5 секунд только при первом ознакомлении. 

Я до того как, встретил такую запись и пользуюсь ей

Вот при попытке понять это я потратил секунд 10-12. А вариант fxsaber`a уже никаких задержек…

Тут все просто, чем меньше уникумов на обычный код, тем голова свежее, зачем носить в ней 5 вариантов циклов?

Вы ведь часто видите чужой код. Меня уже скобка открытия функции в одной строке с заголовком вызывает негатив

 
Alexey Viktorov #:

Но ведь 5 секунд только при первом ознакомлении. 

Я до того как, встретил такую запись и пользуюсь ей

Вот при попытке понять это я потратил секунд 10-12. А вариант fxsaber`a уже никаких задержек…

Когда я изучал язык си и узнавал новые подобные конструкции, я был под впечатлением гибкости возможностей.
Но со временем когда начал писать реальный код, начал потихоньку отходить от подобных записей, в силу того, что код должен бегло читаться.
Всё таки код не для атомного реактора пишем.
Через неделю уже не помнишь, что сам писал )) поэтому ещё комментами всю логику сопровождаю, на что так настаивали сишные преподаватели.
Теперь я их в полном объёме поддерживаю.

Просто для примера, гибкости. В данном случае убийственной ))

for(;;);


Но некоторые сишники используют вместо while, только с телом.

 
Кстати метаквотов это тоже касается. У них нет читабельности кода (аля корпоративного стандарта) в примерах mql документации. 
 
Roman #:

Когда я изучал язык си и узнавал новые подобные конструкции, я был под впечатлением гибкости возможностей.
Но со временем когда начал писать реальный код, начал потихоньку отходить от подобных записей, в силу того, что код должен бегло читаться.
Всё таки код не для атомного реактора пишем.
Через неделю уже не помнишь, что сам писал )) поэтому ещё комментами всю логику сопровождаю, на что так настаивали сишные преподаватели.
Теперь я их в полном объёме поддерживаю.

Просто для примера, гибкости. В данном случае убийственной ))


Но некоторые сишники используют вместо while, только с телом.

A program with an endless loop has undefined behavior if the loop has no observable behavior (I/O, volatile accesses, atomic or synchronization operation) in any part of its cond-expression, iteration-expression or loop-statement. This allows the compilers to optimize out all unobservable loops without proving that they terminate. The only exceptions are the loops where cond-expression is omitted or is a constant expression;  for(;;)  is always an endless loop.

https://en.cppreference.com/w/c/language/for

Вот именно поэтому, используется for(;;), а не while(true)

 
Vladimir Simakov #:

A program with an endless loop has undefined behavior if the loop has no observable behavior (I/O, volatile accesses, atomic or synchronization operation) in any part of its cond-expression, iteration-expression or loop-statement. This allows the compilers to optimize out all unobservable loops without proving that they terminate. The only exceptions are the loops where cond-expression is omitted or is a constant expression;  for(;;)  is always an endless loop.

https://en.cppreference.com/w/c/language/for

Вот именно поэтому, используется for(;;), а не while(true)

Понятно, спасибо за пояснение. И огромная благодарность Вам за детализацию моментов. Вы многому меня научили в прошлом. Вы очень сильный программист, а я самоучка ))
Опять эти оптимизации компилятора, которые нафиг не нужны пользователю.
Всё равно он не знает истинное поведение оптимизации.

 
lynxntech #:

Тут все просто, чем меньше уникумов на обычный код, тем голова свежее, зачем носить в ней 5 вариантов циклов?

Вы ведь часто видите чужой код. Меня уже скобка открытия функции в одной строке с заголовком вызывает негатив

Чтобы не раздражало надо просто пользоваться горячими клавишами. Сочетание ctrl+< или в русской раскладке «Б» выравнивает  всё в привычном для вас виде.

Roman #:

Когда я изучал язык си и узнавал новые подобные конструкции, я был под впечатлением гибкости возможностей.
Но со временем когда начал писать реальный код, начал потихоньку отходить от подобных записей, в силу того, что код должен бегло читаться.
Всё таки код не для атомного реактора пишем.
Через неделю уже не помнишь, что сам писал )) поэтому ещё комментами всю логику сопровождаю, на что так настаивали сишные преподаватели.
Теперь я их в полном объёме поддерживаю.

Просто для примера, гибкости. В данном случае убийственной ))


Но некоторые сишники используют вместо while, только с телом.

А вот таким циклом я никогда не пользовался. А наверное есть моменты когда лучше применить такой вместо while… Отказ от разных вариантов написания ограничивает свои возможности. Приводит, простите к тупизму. Потом начинаем утверждать, что «так» не правильно, надо писать только «так». А некоторые новички в это верят……… 

 
Alexey Viktorov #:

Отказ от разных вариантов написания ограничивает свои возможности. Приводит, простите к тупизму. Потом начинаем утверждать, что «так» не правильно, надо писать только «так». А некоторые новички в это верят……… 

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

 
Roman #:

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

А тот вариант цикла, с которого началось обсуждение вы считаете нечитаемым? А разве различные варианты кода не повышают уровень подготовки? Ведь вы знаете, что большинство начинающих читали и помнят о цикле while, но не все помнят о цикле do while и никогда не используют. Да просто потому, что не встречают в кодах других, считающихся гуру MQL, таких циклов.

 
Vladimir Simakov #:

A program with an endless loop has undefined behavior if the loop has no observable behavior (I/O, volatile accesses, atomic or synchronization operation) in any part of its cond-expression, iteration-expression or loop-statement. This allows the compilers to optimize out all unobservable loops without proving that they terminate. The only exceptions are the loops where cond-expression is omitted or is a constant expression;  for(;;)  is always an endless loop.

https://en.cppreference.com/w/c/language/for

Вот именно поэтому, используется for(;;), а не while(true)

для MQL может быть неверным посылом. Это не С/С++

что конкретно лучше/хуже могут сказать только авторы и то только для текущего билда (и текущего компилятора, новое фсьё не за горами :-) ). 

---

общее примечание к обсуждаемому: циклы перебора ордеров/объектов_платформы убоги, это пожалуй самое худшее что здесь есть. Без разницы for или while, с конца или с начала или с какой стороны ставить ++. Потому что это должен быть foreach