Re: Re: eq vs. ==
by William G. Davis (Friar) on Jul 20, 2003 at 17:47 UTC
|
Consider writing 2 == $val rather than $val == 2. It looks odd, but that way the common typo of = rather than == will give you an immediate compilation error rather than a nasty bug.
I often see people recommending this, but I have yet to actually see it in practice.
Is the = typo really so common that it warrants this kind of obfuscation? Not only does it "look odd," but it doesn't really make sense. You're not trying to find out if 2 equals the unknown, you want to know if the unknown equals 2--but in your code it's backwards. The truth is that I honestly can't remember the last time I made this mistake. No, I'm not bragging; my code has bugs too, and lots of them, but in my personal experience, the = typo really isn't a big problem. It's the type of mistake you make once, spend an enormous amount of time trying to debug, and upon discovering the deceptively simple cause, make sure you never make it again.
Maybe the "constant == unknown" syntax is more useful in C or C++ where you've only got one equality operator, but in Perl, you have both == and eq, and you must actually think about which one to use for each conditional, thus you're less likely to make the mistake of typing = instead of ==.
OT, but tilly, may I ask if you yourself use the "2 == $var" syntax?
| [reply] [Watch: Dir/Any] |
|
Yes, I use the 2 == $var syntax. And yes, I have caught several typos over the years by doing so. YMMV.
As for how common the error is, my experience suggests that we tend to not have a good sense of the errors we make. A useful, painful, and humbling experience is to keep a log of every error of yours that you catch. Categorize them, then go back periodically to review them and think about how you could have prevented them up front.
Odds are that you will find you make a lot more mistakes than you think you do. And they will be of different kinds than you think. (Me, I make more "careless, stupid" errors than I care to admit.)
| [reply] [Watch: Dir/Any] [d/l] |
|
4 == func $a, $b
because if I write it as:
func $a, $b == 4
I can never remember whether that's that calls func
with the arguments $a and $b and compares
that with 4, or whether it calls func with argument
$a and the second argument true/false depending
whether $b is 4 or not.
Abigail | [reply] [Watch: Dir/Any] [d/l] [select] |
|
I find both hard to read because of lack of parentheses. I guess I spent too much time in other languages that force that on you...
Liz
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] |
|
How common is the '=' vs. '==' typo depends on which languages do you mix. If you only write in Perl and C/C++/C#/Java/JavaScript, then it's quite likely you'll not make this mistake. But if you have to write some VB or Pascal or ... then it can happen easily. OTOH, I more often write '==' in a condition in VB than '=' in Perl.
Jenda
Always code as if the guy who ends up maintaining your code
will be a violent psychopath who knows where you live.
-- Rick Osborne
Edit by castaway: Closed small tag in signature
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] |
|
In Pascal (at least in the version as intended by Go^H^HWirth),
you are not very likely to make that mistake. Pascal uses
= to compare two values, and := for
assignment. So, you'd have to type an extra character
(instead of leaving one off) to make this mistake, but even
if you do:
if a := b
then begin ... end
is a compile time error. Not really a problem. In Perl using
assignment instead of comparison in a condition leads to
a compile time warning. However, in C, the use of assignment
instead of comparison is just find, and only some compilers
will warn, if you turn on the appriate warnings. But when
compiling C, it's much more common (and troublesome) to turn
warnings on than in Perl.
Conclusing, when coding in Perl, and certainly in C, is more
likely to make this mistake than when coding in Pascal.
Abigail | [reply] [Watch: Dir/Any] [d/l] |
|