эм… а я правильно понимаю, что этот код всегда (ВСЕГДА) будет выдавать false? соответственно, говнокод тут сводится скорее к вопросу надобности данного метода…
ну давай подумаем вместе. блок finally будет выполняться всегда. даже если return встретился ранее. внутри блока try везде return false стоит… если не согласен с этой логикой, то опиши свой вариант поведения программы.
<code>public boolean foo(...)
{
//do something...
try
{
//do something...
}
finally
{
//Если при условиях необходимо выдать дополнительный результат
if(expr_1)
{
object.sendResult("Result 1");
return false;
}
else if(expr_2)
{
object.sendResult("Result 2");
return false;
}
//Если результат единый для всех
if(expr_1 || expr_2)
return false;
//do something...
if(expr_n)
return false;
}
//do something...
return true;
}</code>
Небольшой совет начинающим, если Ваш метод выполняет возвраты по разным условиям то лучше использовать перечисление через 'else if' так как оно выполняется быстрее вместо простыни 'if'.
таки именно это я шмякнул, не подумав, а потом в спешке прятал от чужих глаз))
но можно, раз уж такие дела, обсудить читаемость кода. мне с if'ом читается лучше.
если переменные осмысленно названы, то как будто чуть-чуть легче становится, но все равно лишний if позволяет не проделывать в голове операцию отрицания:
Но тогда код будет по-другому работать. А чтобы работал точно также как исходный, то, мне кажется, можно сделать только как люди выше предложили.
но можно, раз уж такие дела, обсудить читаемость кода. мне с if'ом читается лучше.
если переменные осмысленно названы, то как будто чуть-чуть легче становится, но все равно лишний if позволяет не проделывать в голове операцию отрицания:
UPDATE:
подумал тут… если написать вот так, то становится читабельно, но такой код сделает больше операций во многих случаях: