Skip to content
Kavachकवच

Operators: Logical

● Beginner3 min

and is true when both sides are; or when either is; not turns true to false.

fn main() {
    const age = 25
    const member = false
    print(age >= 18 and member)
    print(age >= 18 or member)
    print(not member)
}

The program ran and printed:

kavach run logical.kav

falsetruetrue
logical.kav: Kavach code, then what running it prints

The right side is worked out only when needed: in a and b, if a is false, b is skipped:

fn side() -> Bool {
    print("side() ran")
    true
}

fn main() {
    print(false and side())
    print(true or side())
    print(true and side())
}

The program ran and printed:

kavach run short.kav

falsetrueside() rantrue
short.kav: Kavach code, then what running it prints

Words, not symbols

!, && and ||, from C, Java and JavaScript, are refused, and each message says which word to write. kavach fix writes them for you:

fn main() {
    const locked = false
    const open_hours = true
    const alarm = false
    if !locked && open_hours || alarm {
        print("come in")
    }
}
src/main.kav, before: Kavach code
terminal
kavach check
error: Kavach has no `!` for "not": write `not`, as in `not locked` (spec 1.8)
 --> src/main.kav:5:8
  |
5 |     if !locked && open_hours || alarm {
  |        ^

error: Kavach has no `&&`: write `and` (spec 1.8)
 --> src/main.kav:5:16
  |
5 |     if !locked && open_hours || alarm {
  |                ^^

error: Kavach has no `||`: write `or` (spec 1.8)
 --> src/main.kav:5:30
  |
5 |     if !locked && open_hours || alarm {
  |                              ^^
kavach fix src
src/main.kav: Write `not`
src/main.kav: Write `and`
src/main.kav: Write `or`
kavach run
come in