![rw-book-cover](https://readwise-assets.s3.amazonaws.com/media/uploaded_book_covers/profile_966223/07ywb6s-P7y4OATikKGgYUNOkBCLZAC7dgJ6Dwgp9uE-cover_aGBqLBM.png) --- > Booleans do not hold a monopoly of condition values: in Lua, any value can represent a con- > dition. Conditional tests (e.g., conditions in control structures) consider both the Boolean false and nil > as false and anything else as true. In particular, Lua considers both zero and the empty string as true in > conditional tests. - [View Highlight](https://read.readwise.io/read/01h6r3actwcj69275pfk5exgmq) --- > Both and and or use short-circuit evaluation, that is, they evaluate their second operand only when nec- > essary. Short-circuit evaluation ensures that expressions like (i ~= 0 and a/i > b) do not cause > run-time errors: Lua will not try to evaluate a / i when i is zero. - [View Highlight](https://read.readwise.io/read/01h6r38n50amcrs8m1fxhw0d9w) --- > we can select the maximum of two numbers x and y with the expression (x > y) and x > or y. When x > y, the first expression of the and is true, so the and results in its second operand (x), > which is always true (because it is a number), and then the or expression results in the value of its first > operand, x. - [View Highlight](https://read.readwise.io/read/01h6r3ecbhjwzfzqs6brxheav8) ---