Skip to content

Booleans

A boolean value is either true or false.

A boolean value is either true or false.

const ready: bool = true;
const done: bool = false;

The type is bool.

Boolean values are used in conditions.

const std = @import("std");

pub fn main() void {
    const ready = true;

    if (ready) {
        std.debug.print("ready\n", .{});
    }
}

The condition of an if must be a boolean.

const n = 1;

if (n) { // error
    // ...
}

Zig does not treat integers as booleans. Use an explicit comparison.

const n = 1;

if (n != 0) {
    // ...
}

Comparison operators produce boolean values.

const a = 10;
const b = 20;

const less = a < b;
const same = a == b;

Common comparison operators are:

OperatorMeaning
==equal
!=not equal
<less than
<=less than or equal
>greater than
>=greater than or equal

Boolean operators combine boolean values.

const ok = true;
const valid = false;

const both = ok and valid;
const either = ok or valid;
const opposite = !ok;

and is true only when both operands are true.

or is true when at least one operand is true.

! changes true to false and false to true.

Boolean operators short-circuit.

if (index < data.len and data[index] == 0) {
    // safe
}

The second expression is evaluated only if the first expression is true. If index is not less than data.len, data[index] is not evaluated.

This matters for bounds checks, null checks, and error checks.

if (ptr != null and ptr.?.* == 10) {
    // ptr is not null before it is unwrapped
}

A boolean value may be returned from a function.

fn isEven(n: i32) bool {
    return @mod(n, 2) == 0;
}

Then it may be used directly in a condition.

if (isEven(10)) {
    std.debug.print("even\n", .{});
}

A boolean should describe a fact.

const is_empty = len == 0;
const has_space = used < capacity;
const is_open = true;

Good boolean names usually read well inside an if.

if (has_space) {
    // add another item
}

A boolean value can be printed with {}.

const std = @import("std");

pub fn main() void {
    const enabled = true;
    std.debug.print("{}\n", .{enabled});
}

The output is:

true

Use booleans for decisions. Use integers for counts and sizes. Do not mix the two.

Exercises:

  1. Declare a boolean named ready and print it.

  2. Write a function isPositive that takes an i32 and returns true if the number is greater than zero.

  3. Write a condition that checks whether n is between 1 and 10, inclusive.

  4. Write a condition that checks whether an array index is in bounds before reading the array.

  5. Replace an integer used as a flag with a bool.