Где переменные должны быть определены в методе? - PullRequest
1 голос
/ 07 декабря 2009

Предположим, у меня есть метод с параметром типа Object. Метод ничего не возвращает - void.

Сначала проверяется, не является ли параметр нулевым (или любой другой проверкой, например, objectParam.isEnabled())

if (objectParam.isEnabled()) {
    // ok
}

Теперь, если условие выполнено, мне нужны локальные переменные. Если это не так, то мне не нужны переменные.

ГДЕ Я ДОЛЖЕН определить их? Внутри "if scope" или сразу после заголовка метода?

Конечно, я могу делать это где угодно, но какой путь должен быть лучше?

Ответы [ 3 ]

13 голосов
/ 07 декабря 2009

Я полагаю, что лучше всего объявлять переменную как можно позже, в самой плотно вложенной области видимости, в идеале, в точке, где она инициализируется с полезным значением.

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

В данном конкретном случае я не согласен с официальным Руководством по стилю Java, как и Джош Блох. Из Эффективной Явы, 2-е издание, пункт 45:

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

Так что, если вам не нужна переменная, пока вы не выполнили несколько других операторов, не объявляйте ее до этой точки.

1 голос
/ 07 декабря 2009

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

void foo(Object obj){
    if (obj != null) {
        int a = 0;
        ...
    } 
}

Если они не будут использоваться где-либо за пределами этого блока, нет необходимости загромождать метод и путать читателей вашего кода с дополнительными переменными, объявленными вне их требуемой области.

1 голос
/ 07 декабря 2009

Если они используются только в пределах

if (...) { }

блок, тогда они должны быть объявлены в верхней части этого блока.

Руководство по стилю Java содержит более подробную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...