“Делать пока ложно”.
Пару дней назад пытался кратко рассказать товарищу через аську про использование
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);