From 451aa92846b5fd5c8a0739336de3aa26d741d750 Mon Sep 17 00:00:00 2001 From: Taylan Kammer Date: Sat, 29 Mar 2025 11:10:24 +0100 Subject: Relocate MD sources for HTML notes. --- html/notes/booleans.md | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 html/notes/booleans.md (limited to 'html/notes/booleans.md') 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. -- cgit v1.2.3