Daniel Schierbeck
8/15/2006 5:39:00 PM
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