Which do you prefer of these two? The goal is the same. If bar is null then make foo null and avoid the exception. In other languages there is the ?. operator to help with this.

foo = bar == null ? null : bar.baz();
foo = bar != null ? bar.baz() : null;

I ask because I feel like the “English” of the first example is easier to read and has less negations so it is more straightforward, but the second one has the meat of the expression (bar.baz()) more prominently.

  • @[email protected]
    link
    fedilink
    English
    -11 year ago

    The second, or early return/continue/break.

    But don’t forget the third option:

    foo = null
    if (bar != null)
        foo = bar.baz();
    

    This is much more readable if nontrivial; the only downside is that this inhibits the practice of ubiquitous final.

    Actually, doesn’t Java allow lazy final if you don’t initialize (that would require explicit else)? I speak too many languages …

    • @[email protected]
      link
      fedilink
      English
      3
      edit-2
      1 year ago

      This is much less readable if non-trivial. It’s easy enough here, but now I need to search through the code to see where else foo was set.

    • JackbyDevOPM
      link
      fedilink
      English
      11 year ago

      Yes, Java allows lazy final like you say. I also prefer full blown if when it is non trivial or longer than a full line. (Wish we had if-expressions!)