Hacker News new | ask | show | jobs
by sedeki 4037 days ago
Doesn't `if` always require parenthesizes?
4 comments

No, not always. Not in Go, or in Rust, or Ruby, for example. The assumption being in these languages that if is followed by an expression and that expression is parsed to its natural end anyway - but this only works if the syntax allows for that end to be found without ambiguity.
In Go, however, go fmt will remove the unnecessary parentheses. I was very annoyed at first, when I saw this, but I got used to it.
Does it generally do this in expressions, based on operator precedence, or is it limited to the outer parentheses on selected statements?
I am not an expert, but I think it only removes the outermost ones. The major task of the tools is indentation and placement of curly braces.
Yes, in C, but I believe Udo was talking about other languages (like Go for instance)

> and I also do if() even in cases where the language doesn't require it

This sentence could be parsed in multiple ways though :)

Not even in C. You can have an if condition that is actually a macro that expands with parentheses. For example the macros in ctype.h, so you can actually write

  if islower(c) {
      (..)
  }
That's not portable, though: A comforming implementation may very well implement islower as a function call, and you should treat is as such.
Yeah, but macros are not really part of the language, they're more a writing aid than anything really.

So, for the sake of good practices, write if with parenthesis.

That is cheating!
Not in all languages. For example, Go and Swift don’t require it.