2010-07-01 2 views
6

Мне просто интересно, есть ли способ выйти из блока Java. Это может быть любой блок - if block, для блока или даже простой {}. Это потому, что я часто встречаются такие ситуацииЛюбой простой способ выйти из блока Java?

{ 
    retCode = performSomeThing(); 
    if(retCode == SUCCESS) 
    { 
    retCode = performSomethingElse(); 
    if(retCode == SUCCESS) 
    { 
     . . . 
      . . . 
    } 
    } 
} 

Это несколько уровней отступа загромождает код, который я пишу.

Вместо этого мне нужно каким-то образом сделать это

if((retCode = performSomething()) != SUCCESS) 
    GET_OUT_OF_BLOCK 
if((retCode = performSomethingElse()) != SUCCESS) 
    GET_OUT_OF_BLOCK 

Основываясь на значении RETCODE я исполню любую требуемую обработку вне блока. Было бы неплохо, если бы это не связано с записью этого блока внутри блока try-catch, созданием нового типа исключения, его броском, а затем его захватом.

+2

Где мой объектно-ориентированный переход? –

+0

На самом деле на Java есть goto. Если я поймаю вас, используя его, я отряжу ваши уши. – defines

+2

@Dustin: невозможно использовать goto в Java - это зарезервированное слово (то есть не юридический идентификатор), но фактически не используется ни для чего. –

ответ

20

Правильная конструкция для использования - return. Это означает, что то, что является блоком в вашем примере, действительно должно быть методом, но это хорошая идея, так или иначе, - методы, которые так долго, что они содержат несколько сложных алгоритмов потока управления, являются антипатерном. Сделайте себе одолжение и переключитесь на «одну цель за метод» сегодня! <end of evangelism>

2

Кажется, вы используете вложенный здесь ifs для обработки ошибок.

Если вы переключитесь на обработку структурированных исключений, возможно, вы можете вообще избавиться от глубоко вложенных конструкций if.

Это, однако, подразумевает, что performSomeThing() и performSomethingElse() будут генерировать исключения вместо возврата кодов ошибок.

+2

Использование исключений для не исключительных условий или потока управления определенно не рекомендуется. – eljenso

+0

+1 Это именно то, для чего нужны исключения. – sleske

+0

@eljenso: Если вам нужно отменить обработку, потому что операция не была успешной, это было бы хорошим примером для использования исключения. Но это всегда суждение о вызове ... – sleske

7

посмотреть на break и continue

+0

Единственный правильный ответ, как это не проголосовали? – defines

+0

Я бы хотел, если бы мог :) –

-1

< снова евангелизацию>

Не делай этого. На мой взгляд, правильный путь для блока - это одно начало в начале, одна остановка в конце, полная остановка.

Даже с помощью метода вы должны иметь только один возврат в конце.

В блоке вы указываете поток выполняемых инструкций с , если и т. Д., От начала до конца, чем проще вы можете (так, иногда вы пишете возврат или разрыв и т. Д. ОК, это должно быть исключение).

Лучше всего (но не обязательно) писать normal completion statements.

+0

-1 для предоставления личного мнения, а не технически корректного ответа – Pops

Смежные вопросы