Множественный выход - В Северном Ледовитом
[Recent Entries][Archive][Friends][Profile]
12:20
[Link] |
Множественный выход
А какой стиль вы предпочитаете, с одним выходом: private boolean validateSomething1( Object parameter ) {
boolean result = true;
if ( parameter != null ) {
// Lot of staff
// ...
}
return result;
}
или с множеством выходов: private boolean validateSomething2( Object parameter ) {
if ( parameter == null ) return true;
// Lot of staff
// ...
return true;
}
а?
Tags: coding, java, notation, return, style, wtf
|
| |
| ![[User Picture]](https://l-userpic.livejournal.com/3796597/885270) | From: | reineke |
Date: | December 3rd, 2010 10:32 am (UTC) |
---|
| | | (Link) |
|
я в этом, увы, ничего не понимаю, но два раза return true мне не нравится, так что я за первый вариант :-) From: | ptrue |
Date: | December 3rd, 2010 12:03 pm (UTC) |
---|
| | | (Link) |
|
А если там не один if, а много вложенных? ну по идее возвращать надо всё-таки переменную, а не просто некое значение, оно ведь таки меняется в зависимости от стаффа. возвращать стоко раз, скоко точек выхода. если у меня переменная может принимать несколько значений, я предпочитаю прописать все кейсы, а не выстраивать if - if - if - else. хз, мож там прога какой мусор в каком случае принесет или еще чего... че-т, мне кажется, я такие школьные вещи говорю :)) From: | ptrue |
Date: | December 3rd, 2010 12:05 pm (UTC) |
---|
| | | (Link) |
|
Почему надо возвращать переменную? Надо возвращать результат валидации. Если валидировать нечего, то сразу возвращаем true. Если встретили что-то плохое, то сразу возвращаем false. И так далее. Как раз в случае с переменной, придётся выстраивать все if-if-if, только вложенные один в другой. ![[User Picture]](https://l-userpic.livejournal.com/28397525/2882097) | From: | sutasu |
Date: | December 3rd, 2010 10:46 am (UTC) |
---|
| | | (Link) |
|
у меня не жава, конечно, а C#. Предпочитаю первый вариант, потому что во втором случае, пока не пропишешь до конца, Visual Studio может вопить, что not all paths return a value и все такое. А так видит инициализированную переменную, видит, что возвратить надо, а все, что промеж, можно тем временем спокойно отлаживать... From: | ptrue |
Date: | December 3rd, 2010 12:05 pm (UTC) |
---|
| | | (Link) |
|
Резонно. С Eclipse’om то же самое. From: | ptrue |
Date: | December 3rd, 2010 11:34 am (UTC) |
---|
| | | (Link) |
|
Ага. Если оба расстрельные, то можно правильный вариант в студию? Ну в твоем примере я за второй вариант. Сразу проверить параметр и, если что не так, то сразу же и выйти. А иначе скобки эти до самого низа функции... Выходы по ситуации обычно более читаемы. Но если при выходе надо, например, что-то за собой удалять, то, конечно, выход должен быть один.
(дальше шепотом) И я очень люблю отдельно стоящие открывающие скобки. Везде, где работала, именно такой стандарт был к счастью. From: | ptrue |
Date: | December 3rd, 2010 12:23 pm (UTC) |
---|
| | | (Link) |
|
Про удаление — хорошая мысль. Спасибо.
Ну и чем они вам так дороги эти отдельно стоящие левые скобки? :( Если очень хочется совместить оба стиля (не развешивать кучу скобок, но сделать один выход), то do{ }while(false) с брейками можно использовать. Читала где-то что это не очень хороший стиль, но пару раз очень пригождалось именно для того чтобы структуру старого кода оставить и один выход из функции получить.
Ну как чем дороги... Открывающая и закрывающая скобка на одном уровне, все четко и понятно. From: | ptrue |
Date: | December 3rd, 2010 12:25 pm (UTC) |
---|
| | | (Link) |
|
Подозреваю, что он там стал стандартом de facto, ибо там собралось большое количество любителей скобочек :) ![[User Picture]](https://l-userpic.livejournal.com/2333915/545079) | From: | cema |
Date: | December 3rd, 2010 03:43 pm (UTC) |
---|
| | | (Link) |
|
Обычно второй. Sanity check, потом дело. |
|