Есть ли более краткий способ написания этого Java-кода? - PullRequest
6 голосов
/ 12 сентября 2011

Это foo, которое возвращается lookup, может быть null.

. Поэтому я стараюсь не вызывать foo.getFooStr() для значения null, сначала возвращая nullесли foo равно null.

Но есть ли лучший (более краткий) способ написать это?

public static String getFooStr(String input)
{
    Foo foo = lookup(input);
    if(foo==null)
    {
        return null;
    }
    return foo.getFooStr();
}

Ответы [ 6 ]

34 голосов
/ 12 сентября 2011

У вас есть два вопроса: существует ли лучший способ написания кода и есть более краткий способ написания кода.

Что касается более кратких , это может работать:

public static String getFooStr(String input) {
    Foo foo = lookup(input);          
    return foo == null ? null : foo.getFooStr();
}

Относительно лучше : я ценю удобочитаемость по краткости в любой день и с большим отрывом. Ваш оригинальный код выглядит хорошо для меня. Важно то, что выглядит хорошо для вас, и что вам легче понять и отладить через 3 месяца. Я слышал, кто-то сказал это лучше всего - напишите свой код, чтобы его легко могли понять другие, и, что еще важнее, ваше будущее.

6 голосов
/ 12 сентября 2011

Почему нет lookup, который возвращает соответствующую строку foo?

3 голосов
/ 12 сентября 2011

Groovy делает это лучше .

return lookup(input)?.fooStr

или даже просто :

lookup(input)?.fooStr

3 голосов
/ 12 сентября 2011

Я не в Java, но мне нравится чистый код ... Исходный код должен быть легко читаемым и понятным для людей - машина не заботится о том, как она выглядит, но ваши коллеги делают. Более сжатый код обычно занимает несколько секунд, чтобы понять (иногда гораздо дольше, в зависимости от количества и сложности). Сделайте код понятным, и он будет удобен в обслуживании (даже если он немного более многословен)!

2 голосов
/ 12 сентября 2011

Для Java 7 в какой-то момент планировалось, что вы можете просто написать это:

public static String getFooStr(String input)
{
    Foo foo = lookup(input);
    return foo?.getFooStr();
}

Но пока эта функция широко не известна, вам придется придерживаться оператора ?:.

1 голос
/ 12 сентября 2011

Мне не нравятся множественные возвраты в любом месте кода. Я просто поменяю

public static String getFooStr(String input)
{
    Foo foo = lookup(input);
    String fooString;
    if(foo!=null)
    {
        fooString = foo.getFooStr();
    }
    return fooString;
}

Также, на мой взгляд, версия от @Hovercraft Full Of Eels хороша, но менее читабельна, но все еще распространена.

...