Строка инициализации Java (часть 2) - PullRequest
2 голосов
/ 23 июля 2010

Я задал этот глупый вопрос сегодня утром и получил хорошие ответы.Я думаю, что я действительно хотел спросить следующее:

String aString = ""; // Or = null ?
if(someCondition)
   aString = "something";

return aString;

В этом случае строка должна быть инициализирована, чтобы вернуть ее.Я всегда думал, что любой из вариантов (установка «» или «ноль» выглядит отчасти уродливо. Мне просто интересно, что здесь делают другие ... или это больше просто вопрос, хотите ли вы, чтобы пустая строка или нуль передавалисьв вашей программе (и если вы готовы обработать либо)?

Также предположите, что промежуточная логика слишком длинна, чтобы чисто использовать условный оператор (? :).

Ответы [ 7 ]

3 голосов
/ 23 июля 2010
return (someCondition) ? "something" : "";

или

return (someCondition) ? "something" : null;

Как правило, хотя, если ваша функция сообщает, что она возвратит строку, я предпочитаю фактически возвращать строку вместо нуля. В любом случае вызывающая функция, вероятно, должна проверять оба случая.

1 голос
/ 24 июля 2010

Поскольку вы спрашиваете наше мнение ...

Я немного переосмыслил о качестве.Я предпочитаю, чтобы все мои операторы «если» имели «другое», потому что (1) это помогает понять код, если есть несколько вложенных «если», (2) вынуждает меня рассмотреть возможность (что должно произойти, если условиеневерно?).

Что касается причины (1), я предпочитаю избегать вложенных if, но иногда вы наследуете код с большим количеством if.

if(someCondition)
   aString = "something";
else
   aString = "";

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

1 голос
/ 24 июля 2010

В этом случае лучше всего сделать что-то вроде:

public void func() {
    boolean condition = getConditionFromSomewhere();
    String condString = getAppropriateValue(condition);
}

public String getAppropriateValue(boolean condition) {
    if (condition) {
        return "something";
    } else {
        return "somethingElse";
    }
}

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

1 голос
/ 24 июля 2010

зависит от того, чего вы хотите достичь,

в целом, я бы возвратил нуль, чтобы сигнализировать, что ничего не было обработано, позже могут появиться случаи, когда someCondition является истинным, но строка, которую вы строите вместе, в любом случае является ""Таким образом, вы можете отличить от этого случая, если вы возвращаете ноль, если ничего не было обработано.

т.е.

String aString = null;
if(someCondition)
  aString = "something";

return aString;

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

0 голосов
/ 25 июля 2010

Думая об этом, я редко использую "" в коде для любых целей.

0 голосов
/ 24 июля 2010

Это просто ваше предпочтение того, что должен делать ваш API. Если вы возвращаете ноль, может быть шанс, что пользователи API могут получить NPE, если они не проверяют ноль. Но если вы используете строку "", ошибка может пройти бесшумно, если она не должна быть нулевой. Это предпочтение того, как вы пишете свой API и зависит от варианта использования.

0 голосов
/ 24 июля 2010

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

...