«Делать пока ложно».
Пару дней назад пытался кратко рассказать товарищу через аську про использование
do { } while(false); для переписывания длинных ветвящихся if-ов.
Кратко объяснить не получилось, в итоге решил написать в блоге.
Метод довольно спорный, хотя и встречается в некоторых авторитетных источниках (например
в «Совершенном Коде» С. Макконела).
Идея довольно простая.
0. Код помещаем в «do { …много_кода… } while(false);» блок. Если что-то не так вызываем break.
1. Оператор break перекинет нас в конец блока do.
2. Поскольку указан while(false), то повторного выполнения кода не будет.
Конечно можно использовать для таких целей исключения, вспомогательные переменные и т.д., но думаю полезно знать и про такой способ, ведь некоторые его используют.
Обычно он подходит для ситуаций когда идут ветвящиеся проверки if-else, а потом (если все хорошо) делается что-то сложное или важное.
Примитивный (выдуманный) пример:
boolean error = false; if (x > 10) { error = true; } else if (x > 0 && x < = 10) { y = foo(); if (y > 0 && y < 10) { error = true; } else { x = y; } } // много if-else кода if (!error) { doSomething(x, y); } |
С помощью break-ов такой код приобретает более понятный (не для всех!) вид.
do { if (x > 10) { break; } if (x > 0 && x < = 10) { y = foo(); if (y > 0 && y < 10) { break; } else { x = y; } } // много кода для проверок doSomething(x, y); } while (false); |