Каким циклом вы больше любите пользоваться? - страница 2

 

Это же разные циклы !!!

for - это перебор перечисления

while - ожидание условия.

Как можно их смешивать, и спрашивать "какой больше нравится" ?

Конечно, можно цикл while преобразовать так, чтобы он выполнял работу for, и наоборот (с помощью небольшого дополнительного кода), но какой в этом смысл ?

 
George Merts:

Это же разные циклы !!!

for - это перебор перечисления

while - ожидание условия.

Как можно их смешивать, и спрашивать "какой больше нравится" ?

Конечно, можно цикл while преобразовать так, чтобы он выполнял работу for, и наоборот (с помощью небольшого дополнительного кода), но какой в этом смысл ?


Именно это я и пытался сказать. Выбор типа цикла зависит от алгоритма и простоты реализации.

 
Vitalii Ananev:

Зачем? Если очень хочется посмотрите тут последнее сообщение как раз там есть то что вы желаете.

https://www.mql5.com/ru/forum/204377#comment_5305035 

Это что-ли?

for(int i=OrdersTotal()-1; i>=0; i--) {
}
Действительно упрощает и улучшает?
int i = OrdersTotal();

while(i-- > 0) {
}

.

 
Alexander Puzanov:

Это что-ли?

Действительно упрощает и улучшает?

.


Ну вы молодец тут не поспоришь. А вот скажите мне что будет, если во время выполнения вашего цикла будет открыта еще N-ное количество позиций и значение OrdersTotal() увеличится на N? Или наоборот будут закрыты позиции и кол-во их уменьшится.

 
Vitalii Ananev:

Да нет вы меня не так поняли, я не говорю о том, что можно, а что нельзя. Я имел в виду, что в самых первых версиях еще на заре появления программирования эти циклы были задуманы именно для применения в различных случаях, как я описал выше. for когда кол-во итераций известно, while когда нет. К тому же, по моему мнению, применения циклов так как они были изначально задуманы, упрощает понимание и улучшает читабельность кода.


О "заре программирования" в данном случае говорить не вполне уместно. История показывает: то, что задумывалось ранее для одних целей, в будущем может использоваться совершенно иначе. Сейчас циклы for и while с точки зрения подхода к реализации цикла идентичны. Разница может быть только в том, как их воспринимает компилятор. Но на этот вопрос может ответить только разработчик компилятора. В данном случае это представитель компании MetaQuotes.

 
George Merts:

Это же разные циклы !!!

for - это перебор перечисления

while - ожидание условия.

Как можно их смешивать, и спрашивать "какой больше нравится" ?

Конечно, можно цикл while преобразовать так, чтобы он выполнял работу for, и наоборот (с помощью небольшого дополнительного кода), но какой в этом смысл ?


Приведите, пожалуйста, пример. Непонятно, о чем Вы говорите. Ведь цикл for стилистически является более компактной версией цикла while. И там, и там есть ожидание выполнения условия. Пока складывается впечатление, что Вы перепутали эту дискуссию со спором об операторах if и switch. Но там реально есть разница.

 

Как-то пробовал сравнивать быстродействие for и while, выяснилось, что while работает быстрее. Но это не стало аргументом для тотального перехода к while, некоторые привычки не переломить.

 
Ihor Herasko:

О "заре программирования" в данном случае говорить не вполне уместно. История показывает: то, что задумывалось ранее для одних целей, в будущем может использоваться совершенно иначе. Сейчас циклы for и while с точки зрения подхода к реализации цикла идентичны. Разница может быть только в том, как их воспринимает компилятор. Но на этот вопрос может ответить только разработчик компилятора. В данном случае это представитель компании MetaQuotes.


Да я не спорю о том как их использовать. Опять вы не поняли. Да уже не знаю как донести свою мысль, о том что я пытался сказать. В общем последняя попытка :) В учебниках эти циклы и сфера их применения описываются именно так как я сказал. А уж как их будет использовать программист это уже дело самого программиста.

 
Ihor Herasko:

Пока складывается впечатление, что Вы перепутали эту дискуссию со спором об операторах if и switch.

Скорее for и foreach

 
Ihor Herasko:

Приведите, пожалуйста, пример. Непонятно, о чем Вы говорите. Ведь цикл for стилистически является более компактной версией цикла while. И там, и там есть ожидание выполнения условия.

Ну так я и говорю - можно один использовать, как другой и наоборот.

for - предназначен для перебора значений, классический пример - последовательная обработка всех элементов в массиве известного размера.

while - предназначен для ожидания условия, классический пример - цикл выборки, когда заранее неизвестно число элементов, но можно запросить "есть ли еще элементы".

Как первый, так и второй - в конечном итоге преобразуются в ассемблерный код с командой if по установленному флагу. Поэтому, что первый, что второй - можно использовать во всех циклических действиях.

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

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