Hacker News new | ask | show | jobs
by creata 1719 days ago
Okay, it's not insane, it just breaks from a convention followed by practically every programming language (and every logic / engineering / computing course) where integers can be interpreted as booleans. And that might be okay if there's a good reason, but the reasons given are pretty awful:

https://news.ycombinator.com/item?id=11852434

1 comments

Ruby is one popular example of a language with a truthy zero. This is to allow the use of truthiness to detect the presence of a value (as long as the value isn't false), even if the value is zero. Say I wanted to allow an environment variable to override a value in my code. I could do something like this:

    a = ENV['A']&.to_i || 1
and then run the program with A=0 to set a to 0.
Perl has this too. The string "0 but true" is truthy, but is 0 as a numeric value.

(Any string starting with 0 that doesn't evaluate to a different number also works - but "0 but true" is specifically exempt from causing warnings).

DBI uses "0E0" instead, which I guess more reliably evaluates to 0 outside Perl, and still doesn't cause warnings.

That approach is not unreasonable per se. But 1 being false is much harder to rationalize.