In Toit, the boolean type is
bool and its two values are written
Whenever built-in constructs need to evaluate a condition (for example in an
if or a
while), then Toit first "boolifies" the given value. The values
null are treated like
false and every other value is converted
So in a condition context,
null is falsy and other non-booleans are truthy.
main: t := true if t: print "This is printed because t boolifies to true." f := false if f: // 'f' boolifies to false. unreachable n := null if n: // null in a condition boolifies to false. unreachable str := "" if str: // Strings, like every non-false non-null, object // boolify to true. print "This branch is executed." z := 0 if z: // As before: 0, neither being false, nor being null, is // boolified to true. print "This branch is executed" list :=  if list: print "This branch is reached" // Boolification only occurs in `if`, `for`, and `while` // conditions, and the first operand of the ternary `?:` // operator: b1 /bool := null // Error: null is not a bool! b2 /bool := s // Error: A string is not a bool! b3 /bool := z // Error: A number is not a bool! b4 /bool := list // Error: A list is not a bool! print (list ? "foo" : "bar") // Prints "foo", because lists are truthy. print (null ? "foo" : "bar") // Prints "bar", because null is falsy. print (0 ? "foo" : "bar") // Prints "foo", because zero is truthy.