"David Garamond" <lists / zara.6.isreserved.com> schrieb im Newsbeitrag
news:40BC6E5F.1010502 / zara.6.isreserved.com...
> Robert Klemme wrote:
> > It's superfluous to convert a boolean to a boolen in *all* programming
> > languages, although special bugs can arise from these conversions only
in C
> > and other languages that don't have real booleans:
>
> Agreed, it's generally wrong in most languages to use equality test for
> booleans. I think this is because truth values transcend types (i.e. we
> can ask for truth value for many types of values).

No.  The reason in C is, that there is a single value for 'false' but a
lot for 'true' and *not* that a lot of types can be used in a boolean
context (because they can be converted to bool aka int).

The same idiom is safe in Java, because it has boolean - but still
superfluous.  In Java you should only use it in the rare case where you
want to compare two boolean expressions:

if ( getBoolX() == getBoolY() ) {...

is simpler and more intuitive than

if ( ( getBoolX() && getBoolY() ) || ( !getBoolX() && !getBoolY() ) ) {
....

Apart from that, there is a minor reason: the performance overhead for
some extra operations.  But the main reason remains that it's superfluous
and extremely error prone.  Whenever you see something like this
(regardless of programming language), your alarm bells should ring:

if x > 10
  return true
else
  return false

return x < 22 ? false : true

return x == true ? false : true

(Safe replacements left as an exercise for the reader. :-))

> Thankfully in Ruby
> things are simplified: nil and false values are always false, everything
> else is true.

From a certain point of view you could say that Ruby is more complicated
than C since it has two values meaning 'false' where C has only one.  The
fact that all objects can occur in a boolean context just saves you some
explicit conversions you'd have to do in other languages.

Regards

    robert