Here's a language feature I (and many others) love to hate: using
== as an equality test, while
define or even assignment. It's easy to object to this on the grounds that it abuses
=, but this abuse is so common that it's not really confusing any more.
Update 13 Feb: Conveniently, equality is the only common meaning of
==. Using it for anything else would be confusing.
= has so many meanings that it hardly suggests anything, misleading or not.
There's also a minor advantage to this choice of names.
define (or assignment, in imperative languages) can be considerably more common than equality tests, so we can save characters by giving it the shorter name. This is a tiny savings, but it is in the most important part of a language. Top-level definitions, and especially their first lines, are read more often than other code, because you scan them while searching for the definition you want. So if it makes Haskell-style definitions a little easier to read, using
= could be worth a little confusion.
The three-line = sign (
≡, if you have that character) would be better, but it's not a practical option yet. So I suppose I should stop complaining about
= and enjoy its readability.