Booleans hold true or false and drive conditions.

boolean expression A boolean expression evaluates to `true` or `false`.

Booleans

example
booleans.go
Replay: real traced execution (multi-file project)
package main

import "fmt"

func main() {
	var completed = true
	var lessons = 4
	ready := completed && lessons >= 3

	fmt.Println("completed=", completed)
	fmt.Println("lessons=", lessons)
	fmt.Println("ready=", ready)
}
package main

import "fmt"

func main() {
	var completed = false
	var lessons = 4
	ready := completed && lessons >= 3

	fmt.Println("completed=", completed)
	fmt.Println("lessons=", lessons)
	fmt.Println("ready=", ready)
}
package main

import "fmt"

func main() {
	var completed = true
	var lessons = 1
	ready := completed && lessons >= 3

	fmt.Println("completed=", completed)
	fmt.Println("lessons=", lessons)
	fmt.Println("ready=", ready)
}
package main

import "fmt"

func main() {
	var completed = true
	var lessons = 6
	ready := completed && lessons >= 3

	fmt.Println("completed=", completed)
	fmt.Println("lessons=", lessons)
	fmt.Println("ready=", ready)
}
  1. completed ← true, lessons ← 4, ready ← true

    5func main() {6  var completed→ true = true //@completed=false7  var lessons→ 4 = 4      //@lessons=1, 68  ready→ true := completedtrue && lessons4 >= 3910  fmt.Println("completed=", completedtrue)11  fmt.Println("lessons=", lessons4)12  fmt.Println("ready=", readytrue)13}
    outputcompleted= true
    lessons= 4
    ready= true
  1. completed ← false, lessons ← 4, ready ← false

    5func main() {6  var completed→ false = false7  var lessons→ 4 = 48  ready→ false := completedfalse && lessons4 >= 3910  fmt.Println("completed=", completedfalse)11  fmt.Println("lessons=", lessons4)12  fmt.Println("ready=", readyfalse)13}
    outputcompleted= false
    lessons= 4
    ready= false
  1. completed ← true, lessons ← 1, ready ← false

    5func main() {6  var completed→ true = true7  var lessons→ 1 = 18  ready→ false := completedtrue && lessons1 >= 3910  fmt.Println("completed=", completedtrue)11  fmt.Println("lessons=", lessons1)12  fmt.Println("ready=", readyfalse)13}
    outputcompleted= true
    lessons= 1
    ready= false
  1. completed ← true, lessons ← 6, ready ← true

    5func main() {6  var completed→ true = true7  var lessons→ 6 = 68  ready→ true := completedtrue && lessons6 >= 3910  fmt.Println("completed=", completedtrue)11  fmt.Println("lessons=", lessons6)12  fmt.Println("ready=", readytrue)13}
    outputcompleted= true
    lessons= 6
    ready= true

Follow the Values

  1. completed starts as true.
  2. lessons starts at 4.
  3. lessons >= 3 is true because 4 is at least 3.
  4. ready := completed && lessons >= 3 becomes true.
  5. The program prints completed= true, lessons= 4, and ready= true. | completed | lessons | lessons >= 3 | ready | | --- | --- | --- | --- | | false | 4 | true | false | | true | 1 | false | false | | true | 4 | true | true | | true | 6 | true | true |

Exercise: booleans.go

Reproduce ready= true, then use the pinned completed and lessons values to identify when ready becomes false.