Hacker News new | ask | show | jobs
by Udo 4037 days ago
I'd like to confess that I'm one of the return() people, and I also do if() even in cases where the language doesn't require it. This behavior isn't borne out of confusion about what is and what isn't a special language construct. Rather, it helps me prop up the illusion that programming is about using a few simple primitives instead of being the chain of compiler directives it actually entails - it's an esthetic choice if not always a logical one.

The thought that if() could just be a lazily-evaluated function taking a code block argument, and that return() could be a way of marking the end result of an expression somehow pleases me.

I think the different expectations about sizeof() come from the artificial distinction between operators and functions, the implication being that in a compiled language the sizeof operator would be a compile-time construct, or barring that, at least a behavior of the type system. On the other hand, there are tons of compiler intrinsics in C/C++ that look exactly like functions but aren't.

1 comments

Doesn't `if` always require parenthesizes?
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.