При просмотре я иногда сталкиваюсь с таким типом цикла:
i = begin
while ( i != end ) {
// ... do stuff
if ( i == end-1 (the one-but-last element) ) {
... do other stuff
}
increment i
}
Затем я задаю вопрос: напишите ли вы это?
i = begin
mid = ( end - begin ) / 2 // (the middle element)
while ( i != end ) {
// ... do stuff
if ( i > mid ) {
... do other stuff
}
increment i
}
По-моему, это бьет намерение написать цикл: вы зацикливаете, потому что для каждого из элементов есть что-то общее. Используя эту конструкцию, для некоторых элементов вы делаете что-то другое. Итак, я заключаю, вам нужен отдельный цикл для этих элементов:
i = begin
mid = ( end - begin ) / 2 //(the middle element)
while ( i != mid ) {
// ... do stuff
increment i
}
while ( i != end ) {
// ... do stuff
// ... do other stuff
increment i
}
Теперь я даже увидел question на SO о том, как написать if
-clause в хорошем смысле... И мне стало грустно: что-то здесь не так.
Неужели я ошибаюсь? Если да, то что же хорошего в том, что загромождать тело цикла особыми случаями, о которых вы знаете заранее, во время кодирования?