У розділі Коли слід використовувати виняток у Прагматичному програмісті , книга пише, що замість:
retcode = OK;
if (socket.read(name) != OK) {
retcode = BAD_READ;
}
else {
processName(name);
if (socket.read(address) != OK) {
retcode = BAD_READ;
}
else {
processAddress(address);
if (socket.read(telNo) != OK) {
retcode = BAD_READ;
}
else {
// etc, etc...
}
}
}
return retcode;
вони віддають перевагу:
retcode = OK;
try {
socket.read(name);
process(name);
socket.read(address);
processAddress(address);
socket.read(telNo);
// etc, etc...
}
catch (IOException e) {
retcode = BAD_READ;
Logger.log( "Error reading individual: " + e.getMessage());
}
return retcode;
просто тому, що це виглядає акуратніше. Я все за чистіший код, однак не зайвим є виняток із вузьким місцем продуктивності?
Я можу зрозуміти, що ми повинні відмовитись від мізерної оптимізації для більш чистих кодів (принаймні у 99% разів), однак, наскільки я знаю, вилучення винятків належать до класу коду, у якого помітна затримка у виконанні. Отже, мені було цікаво, яке виправдання, що другий фрагмент коду віддається перевазі перед першим кодом?
А точніше, якому коду ви б віддали перевагу?