Hacker News new | ask | show | jobs
by dampier 4763 days ago
If you read the code, you will notice that the FIRST time this error is encountered, it will always be logged.

The test in question is done frequently, and subsequent failures are about 100 times less interesting than the first. Unless you just like filling up disks with log files while your network is acting up.

Finally, note that the "_ok" flag will be RESET and the resolved condition logged once the test finally returns to succeeding.

1 comments

Awesome, thanks for the explanation
Thank you for an excellent counterexample for when people claim code comments are useless.
You could express the same thing without comments:

    boolean alreadyLogged = !_ok;
    boolean skipLogging = alreadyLogged && (Math.random() > 0.1)
    if( skipLogging ) return res;
I strongly dislike your version. Creating a boolean just to use and discard in the next line? Twice? Ugly. I'd much rather keep the code simple and try to cut out confusing parts. Give the flag a better name and remove the useless ternary. I'd also get rid of the conditional return and let the one outside the catch do the work.

  if (!errorLogged || (Math.random() < 0.1)) {
    
    errorLogged = true;
    
    // log error
    
  }
But if it's a choice between comments and adding temporary variables that don't do anything, I'll almost always choose comments.
I'd tend to choose temporary variables. I trust my compiler to optimise them out, and I find it makes it much easier to find the appropriate place to change or add new code.

"Does this affect working out whether the error has been logged before?", "Does this affect whether we should log this error?", etc

EDIT: But in this case I'd still want to put a comment clarifying the "why".

are you sure the compiler is smart enough to do that? I think we frequently assume compilers are smarter than they really are because we don't fully understand them anymore... but in practice I find they often do very dumb things.
I wouldn't actually have them as Boolean variables, I'd extract them into query methods, then the code would just be:

    if( skipLogging() ) return res;
Heh ... agreed. A comment here would definitely not go amiss.