И снова я со своей книгой "Для про". Почему в цикле for
не рекомендуется прерывание с помощью break
? Как же тогда это сделать?
Мне этот совет кажется достаточно странным.
Представьте себе, что вы можете определить условие выхода только после какой-то работы. Например:
for (int i = 0; i < paths.length; i++) {
File file = getFile(paths[i]);
FileType ft = parseType(file);
if (badTypes.contains(ft)) {
break;
}
// ...
}
Этот код говорит сам за себя: если мы нашли плохой тип файла, обработку завершаем.
Другие методы, например, присваивание специального значения переменной цикла или проверка специального флага «а не нужно ли нам завершить обработку вотпрямща», кажутся мне искусственными, костыльными путями сказать, что вы хотите просто завершить обработку в той точке, где стоит break
.
В хорошем языке вы пишете то, что думаете, а не пытаетесь сказать это хитрыми косвенными методами.
Так что совет не использовать break
я оставлю на совести автора книги. Этот совет мне кажется вредным.
Другое дело, что не стоит использовать break
бесконтрольно, нужно всё время заботиться о читаемости кода. Иначе из полезного инструмента он превратится во вредный.
Дополнительно по теме: Donald Knuth, Structured Programming With Go To Statements.
Скорее всего в книге имелось ввиду то, что не следует использовать прерывание цикла for
с помощью break
в нормальных ситуациях, так как естественное условие выхода из цикла for
задается непосредственно при объявлении цикла.
А при возникновении каких-то исключительных ситуаций, когда из цикла необходимо выйти раньше, чем было задумано изначально, использование break
вполне нормально и оправдано.
Почему плохо goto? Эдсгер Дейкстра, в свое время очень хорошо написал про это
break плох примерно по тем же причинам. Он нарушает execution flow. Не так фатально как goto, но все же.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не получается настроить свои кнопки для переключения слайдов в bxslider, а точнее иконки с FontAwesomeНеобходимо их сделать по центру слайда с отступами...
Возможно ли силами C# отловить заголовок окна стороннего ПО и переименовать его на время сессииНапример найти процесс calculator