Следующий пост будет расширенным обсуждением фигурных скобок без правильного или неправильного ответа, просто больше «дело вкуса». Речь идет о том, помещать «else» (и другие ключевые слова, такие как «catch», «finally») в новую строку или нет.
Некоторые могут написать
|
1
2
3
4
5
|
if (something) { doIt();} else { dontDoIt();} |
Я, однако, предпочитаю
|
1
2
3
4
5
6
|
if (something) { doIt();} else { dontDoIt();} |
Это выглядит глупо, возможно. Но как насчет комментариев? Куда они идут? Это почему-то выглядит неправильно для меня:
|
1
2
3
4
5
6
7
8
9
|
// This is the case when something happens and blah// blah blah, and then, etc...if (something) { doIt();} else { // This happens only 10% of the time, and then you // better think twice about not doing it dontDoIt();} |
Разве следующее не намного лучше?
|
01
02
03
04
05
06
07
08
09
10
11
|
// This is the case when something happens and blah// blah blah, and then, etc...if (something) { doIt();}// This happens only 10% of the time, and then you// better think twice about not doing itelse { dontDoIt();} |
Во втором случае я действительно документирую случай «если» и «еще» отдельно. Я не документирую вызов «dontDoIt ()». Это может пойти дальше:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
// This is the case when something happens and blah// blah blah, and then, etc...if (something) { doIt();}// Just in caseelse if (somethingElse) { doSomethingElse();}// This happens only 10% of the time, and then you// better think twice about not doing itelse { dontDoIt();} |
Или с try-catch-finally:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// Let's try doing some businesstry { doIt();}// IOExceptions don't really occurcatch (IOException ignore) {}// SQLExceptions need to be propagatedcatch (SQLException e) { throw new RuntimeException(e);}// Clean up some resourcesfinally { cleanup();} |
Это выглядит аккуратно, не так ли? В противоположность этому:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
// Let's try doing some businesstry { doIt();} catch (IOException ignore) { // IOExceptions don't really occur} catch (SQLException e) { // SQLExceptions need to be propagated throw new RuntimeException(e);} finally { // Clean up some resources cleanup();} |
Мне любопытно услышать ваши мысли …
Ссылки: лучшие практики стиля кодирования if-else от нашего партнера по JCG Лукаса Эдера из блога JAVA, SQL и JOOQ .