Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

One, very simple, example:

int some_function( some_variable ) {

  if (some_variable) {
    b = 1;
  } else {
    b = 2;
  }

  log("Its important I log that I'm returning %d\n", b);

  return b;
}

If its not obvious why this is superior...



Go's defer feature, combined with named return values, lets you do this:

    func someFunction(b bool) (i int) {
        defer func() {
            log.Printf("I'm returning %d", i)
        }()
        if b {
            return 1
        }
        return 0
    }
For more on defer, see this blog post: http://blog.golang.org/2010/08/defer-panic-and-recover.html


The single return is also useful for post-condition assertions of return values and internal state.


This of course exemplifies why it's impossible to declare almost any technique categorically "good" or "bad". Sometimes early returns make code shorter and more clear. Sometimes the opposite. To borrow from Stroustrup, experience and taste matter a lot.


In dynamic languages you can do this:

  some_function = function() {
    if (...) return 1;
    if (...) return 2;
  }.log("It's important I log that I'm returning");


  int some_function( some_variable ) {

    log("Its important I log that I'm returning %d\n", (some_variable ? 1 : 2));

    return (some_variable ? 1 : 2);
  }


Now you're duplicating logic for a log statement...


I have a new _no_ computation in log statements rule. A bug in there is nigh near impossible to fix because you're not looking for it.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: