top | item 17645855

(no title)

mnarayan01 | 7 years ago

  if a = foo()
versus:

  if (a = foo())
Sometimes idiomatic patterns vary based on things which are not amiable to mechanical correction.

discuss

order

quxbar|7 years ago

The trick is to ban even the correct but (to a human) ambiguous patterns. In this case, I wouldn't let you do assignment on the same line as the conditional.

squiggleblaz|7 years ago

With an `if` it's probably superfluous and therefore bannable without cost, but sometimes it can make a `while` loop so much more concise - since the alternative would be to write the same code before the loop and at the bottom of the loop. It is the cost of inexpressive languages.

fipple|7 years ago

In what language do those produce different results?

mattnewton|7 years ago

In many people’s head-parser, the first one looks like an equality check (but is in fact assignment). The parens try to clue people into “this is an assignment expression!” I think, but personally I wouldn’t allow an assignment expression in an if statement even with parens.

munchbunny|7 years ago

While you have a point, I don't think the exception should disprove the rule. Even if a few specific style patterns can't be automated, the bulk can be and it's probably better to have them enforced at the pre-compile stage.