Matthew Smillie wrote: > On Aug 15, 2006, at 15:05, Daniel Schierbeck wrote: > >> Matthew Smillie wrote: >>> if X != Y # X not equal to Y >>> unless X == Y # X equal to Y >>> You can pick the one that's more linguistically appealing to you, >>> though I have a hunch that 'if' is more popular than 'unless'. >> >> I only think that's because most other languages don't have `unless' :) > > That was my first intuition too, and I'm certain that's part of it, but > upon further reflection I think there's more to it as well. To make an > if and unless statement equivalent, you have to negate the condition, > leading to this basic schema: > > (1) if X != Y <--> unless X == Y > (2) if X == Y <--> unless X != Y > > Logically, everything's kosher, but linguistically there's a crucial > difference: the 'unless' form of (2) is a double negative. I'm sure > people are generally familiar with the admonition to avoid double > negatives in their writing, and it's for a good reason: people have a > hard time understanding multiple negations; to be fair, two is usually > not a problem, especially in familiar forms such as "not unlike X", but > in general it's not an easy task to not do incorrectly. (see?) > > So, if you assume that given the choice people won't use > linguistically-uncomfortable code, then there are two basic comfortable > 'if' forms, but only one comfortable 'unless' form. Given the lovely, > literary nature of Ruby code, this seems like a reasonable assumption to > make; so even if everyone were perfectly familiar with 'unless' as a > language construct, you'd still expect 'if' to outnumber 'unless'. > > Not that I think this has much bearing on the language, just a neat > observation. Interesting thoughts (and cool example). I do however tend to use short, one-liner conditional statements the most, in which I think `unless' fits much nicer than `if not'. Cheers, Daniel