В разделе « Когда использовать исключение в Pragmatic Programmer» книга пишет, что вместо:
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% случаев), однако, насколько я знаю, перехват исключений относится к классу кода, который имеет заметную задержку во время выполнения. Поэтому мне было интересно, каково оправдание того, что второй кусок кода предпочтительнее первого кода?
Или, скорее, какой код вы бы предпочли?