?

Log in

No account? Create an account
Множественный выход - В Северном Ледовитом
December 3rd, 2010
12:20

[Link]

Previous Entry Share Next Entry
Множественный выход
А какой стиль вы предпочитаете, с одним выходом:

    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: , , , , ,

(79 comments | Leave a comment)

Comments
 
[User Picture]
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, а много вложенных?
[User Picture]
From:_wwwera_
Date:December 3rd, 2010 10:41 am (UTC)
(Link)
ну по идее возвращать надо всё-таки переменную, а не просто некое значение, оно ведь таки меняется в зависимости от стаффа. возвращать стоко раз, скоко точек выхода. если у меня переменная может принимать несколько значений, я предпочитаю прописать все кейсы, а не выстраивать if - if - if - else. хз, мож там прога какой мусор в каком случае принесет или еще чего... че-т, мне кажется, я такие школьные вещи говорю :))
From:ptrue
Date:December 3rd, 2010 12:05 pm (UTC)
(Link)
Почему надо возвращать переменную? Надо возвращать результат валидации. Если валидировать нечего, то сразу возвращаем true. Если встретили что-то плохое, то сразу возвращаем false. И так далее. Как раз в случае с переменной, придётся выстраивать все if-if-if, только вложенные один в другой.
(Deleted comment)
(Deleted comment)
(Deleted comment)
[User Picture]
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 то же самое.
(Deleted comment)
(Deleted comment)
From:ptrue
Date:December 3rd, 2010 11:34 am (UTC)
(Link)
Ага. Если оба расстрельные, то можно правильный вариант в студию?
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
[User Picture]
From:mouse_sonya
Date:December 3rd, 2010 12:20 pm (UTC)
(Link)
Ну в твоем примере я за второй вариант. Сразу проверить параметр и, если что не так, то сразу же и выйти. А иначе скобки эти до самого низа функции...
Выходы по ситуации обычно более читаемы.
Но если при выходе надо, например, что-то за собой удалять, то, конечно, выход должен быть один.

(дальше шепотом) И я очень люблю отдельно стоящие открывающие скобки. Везде, где работала, именно такой стандарт был к счастью.
From:ptrue
Date:December 3rd, 2010 12:23 pm (UTC)
(Link)
Про удаление — хорошая мысль. Спасибо.

Ну и чем они вам так дороги эти отдельно стоящие левые скобки? :(
[User Picture]
From:mouse_sonya
Date:December 3rd, 2010 12:33 pm (UTC)
(Link)
Если очень хочется совместить оба стиля (не развешивать кучу скобок, но сделать один выход), то do{ }while(false) с брейками можно использовать. Читала где-то что это не очень хороший стиль, но пару раз очень пригождалось именно для того чтобы структуру старого кода оставить и один выход из функции получить.

Ну как чем дороги...
Открывающая и закрывающая скобка на одном уровне, все четко и понятно.
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
From:ptrue
Date:December 3rd, 2010 12:25 pm (UTC)
(Link)
Подозреваю, что он там стал стандартом de facto, ибо там собралось большое количество любителей скобочек :)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
[User Picture]
From:cema
Date:December 3rd, 2010 03:43 pm (UTC)
(Link)
Обычно второй. Sanity check, потом дело.
Powered by LiveJournal.com