diff options
Diffstat (limited to 'html/notes/booleans.md')
| -rw-r--r-- | html/notes/booleans.md | 32 |
1 files changed, 0 insertions, 32 deletions
diff --git a/html/notes/booleans.md b/html/notes/booleans.md deleted file mode 100644 index 61b9d7e..0000000 --- a/html/notes/booleans.md +++ /dev/null @@ -1,32 +0,0 @@ -# Only Booleans have truthiness - -Like in Java, there should be no implicit conversion of values to a -Boolean. This leads to sloppy code and subtle bugs. - -I believe the code base of Guix contained an example of this at some -point: Build phases ending in a call to `system*` would return 0 or 1 -which would pass as "true" regardless. - -In most cases, you should know the actual type of the value you're -receiving, and do an appropriate check, be it `zero?`, `null?`, or -some other check. If you truly want to check if something is "any -value other than false" then you can always do: - -```scheme - -(if (not (eq? #f value)) - (do something)) - -``` - -No, you cannot use `(not (not x))` because `not` obviously expects a -Boolean argument! Duh. - -I'm actually serious about this. Scheme went all the way to make null -separate from false, but then refused to go all the way and decided to -allow non-Boolean values to function as Booleans anyway. - -Of course, performing a type-check on every single conditional may -incur a serious performance penalty. If so, then the same flag that -determines [whether returned values can be ignored](strict-mode.html) -may also determine whether non-Booleans can be coerced into Booleans. |
