• sugar_in_your_tea@sh.itjust.works
      link
      fedilink
      arrow-up
      4
      arrow-down
      2
      ·
      2 days ago

      It’s only vague if coming from a language where it’s invalid or vague semantically. For example:

      • Javascript - [] is truthy for whatever reason
      • C - int x[] = {}; evaluates to true because it’s a pointer; C only evaluates to false if something is 0
      • Rust - invalid because you cannot convert a vec -> bool directly, and there’s no concept of null (same w/ Go, but Go has nil, but requires explicit checks)
      • Lua - empty tables, zero, and empty strings are truthy; basically, it’s truthy unless it’s nil or false

      The only surprising one here is Javascript. I argue Lua and Python make sense for the same reason, Lua just decided to evaluate truthiness based on whether the variable is set, whereas Python decided to evaluate it based on the contents of the variable. I prefer the Python approach here, but I prefer Lua as a language generally (love the simplicity).