Еще в 1967 году Эдгар Дейкстра написал в отраслевом журнале статью о том, почему goto следует исключить из языков высокого уровня, чтобы улучшить качество кода. Из этого родилась целая парадигма программирования под названием «структурированное программирование», хотя, конечно, не все согласны с тем, что goto автоматически означает плохой код.
Суть структурного программирования заключается в том, что структура кода должна определять его поток, а не переходы, разрывы или продолжение, где это возможно. Точно так же в этой парадигме не рекомендуется наличие нескольких точек входа и выхода для цикла или функции.
Очевидно, что это не единственная парадигма программирования, но часто ее можно легко применить к другим парадигмам, таким как объектно-ориентированное программирование (например, Java).
Ваши учителя, вероятно, учили и пытаются научить ваш класс тому, что нам лучше избегать «кода спагетти», убедившись, что наш код структурирован и следует подразумеваемым правилам структурного программирования.
Хотя в реализации, использующей break, нет ничего изначально «неправильного», некоторые считают, что значительно легче читать код, в котором условие для цикла явно указано в условии while(), и устраняются некоторые возможности чрезмерной хитрости. Определенно существуют ловушки при использовании условия while(true), которые, кажется, часто появляются в коде у начинающих программистов, например, риск случайного создания бесконечного цикла или создания кода, который трудно читать или излишне запутывать.
По иронии судьбы, обработка исключений — это область, в которой отклонения от структурного программирования, безусловно, появятся и будут ожидаемы по мере того, как вы будете углубляться в программирование на Java.
Также возможно, что ваш преподаватель ожидал, что вы продемонстрируете свою способность использовать определенную структуру цикла или синтаксис, изучаемый в этой главе или уроке вашего текста, и, хотя код, который вы написали, функционально эквивалентен, вы, возможно, не демонстрировали его. определенный навык, который вы должны были освоить на этом уроке.
person
Jessica Brown
schedule
28.07.2011
break
, вероятно, имеет хороший смысл, но на самом деле неправильно понято. Возможно, вы можете обучить этому своего профессора ;) По моему опыту, профессора мало знают о ремесле программирования. - person Magnus Hoff   schedule 28.07.2011do {} while (true)
эквивалентноwhile(true) {}
, а последнее является гораздо более традиционной формой и намного яснее. - person Voo   schedule 28.07.2011break
, ему следует попробовать программировать на языке без него. Не нужно слишком много петель, прежде чем вы пожелаете этого! - person Steven   schedule 28.07.2011do {} while (true);
хорошо сочетается сdo {} while (false);
. :^) - person Tom Hawtin - tackline   schedule 28.07.2011do while(true)
, а не потому, что я использовалwhile(true)
. Мой профессор сказал, чтоdo while true
сбивает с толку при чтении, а посколькуdo while true
функционально совпадает сwhile true
, нет причин не использовать последний, который легче читать с первого взгляда. Я не согласен с людьми, которые говорят, что использованиеwhile true break
равносильно использованию логического значения вwhile
. Оператор break принципиально отличается, так как он заканчивается в этом месте. - person Jacqlyn   schedule 13.02.2014GOTO
, была очень сильной, и если вы безоговорочно признаете, что GOTO — плохой оператор, очень легко экстраполировать на то, что любой GOTO-подобный механизм потока плох. Похоже, это произошло здесь. Я обнаружил, что мне редко нужныbreak
/continue
, но часто для рефакторинга метода, где они затем заменяются наreturn
. - person Thorbjørn Ravn Andersen   schedule 29.07.2015do-while (true)
? Помимо того, чтоwhile-do
более понятен, я думаю, что основная причина, по которой некоторые опытные программисты говорят студентам не использоватьwhile-loops
вместо этого использоватьfor-loops
, заключается в том, что при определенных незапланированных условияхwhile-loop
может превратиться в бесконечный цикл, т.е. потенциально состояние гонки, и это намного сложнее/более раздражает. для отладки. Мне сказал это кто-то, чей код я уважаю однажды, но не зацикливался на этом. Поэтому я всегда выполняю рефакторинг доfor-loop
, если могу. очевидно, что на самом деле это невозможно, если вы хотите прервать цикл, если язык не позволяетbreak
вfor-loops
. - person wide_eyed_pupil   schedule 06.08.2015while(..){..}
!=do {..} while(..)
, так как выполнение do-while гарантированно выполняется хотя бы один раз! - person Martin Pfeffer   schedule 20.03.2017true
начнет оцениваться как false. - person Voo   schedule 20.03.2017break
, и существуют хорошие формальные аргументы против дополнительного состояния. Аргумент Дейкстры не работает. - person user207421   schedule 03.12.2019