È uscito il Corso SQL Completo

Operatori Logici in Go

Gli operatori logici in Go permettono di combinare espressioni booleane per creare condizioni più complesse. Restituiscono sempre un valore bool.

Operatori Disponibili

Operatore Nome Descrizione
&& AND logico Vero se entrambe le condizioni sono vere
|| OR logico Vero se almeno una condizione è vera
! NOT logico Inverte il valore booleano

AND Logico (&&)

L’operatore && restituisce true solo se entrambe le condizioni sono vere:

package main

import "fmt"

func main() {
    eta := 25
    haPatente := true

    if eta >= 18 && haPatente {
        fmt.Println("Puoi guidare")
    }

    fmt.Println(true && true)   // true
    fmt.Println(true && false)  // false
    fmt.Println(false && true)  // false
    fmt.Println(false && false) // false
}

OR Logico (||)

L’operatore || restituisce true se almeno una condizione è vera:

func main() {
    giorno := "sabato"

    if giorno == "sabato" || giorno == "domenica" {
        fmt.Println("È weekend!")
    }

    fmt.Println(true || true)   // true
    fmt.Println(true || false)  // true
    fmt.Println(false || true)  // true
    fmt.Println(false || false) // false
}

NOT Logico (!)

L’operatore ! inverte un valore booleano:

func main() {
    attivo := false

    if !attivo {
        fmt.Println("L'utente non è attivo")
    }

    fmt.Println(!true)  // false
    fmt.Println(!false) // true
}

Valutazione Short-Circuit

Go utilizza la valutazione a corto circuito: se il risultato è determinabile dal primo operando, il secondo non viene valutato.

func controlloLento() bool {
    fmt.Println("Questa funzione è stata chiamata")
    return true
}

func main() {
    // controlloLento() NON viene chiamata perché false && ... è sempre false
    if false && controlloLento() {
        fmt.Println("Non raggiungibile")
    }

    // controlloLento() NON viene chiamata perché true || ... è sempre true
    if true || controlloLento() {
        fmt.Println("Sempre raggiungibile")
    }
}

Combinare Più Condizioni

func puoIscriversi(eta int, haDocumenti bool, haAcconto bool) bool {
    return eta >= 18 && (haDocumenti || haAcconto)
}

Le parentesi controllano la precedenza: ! ha la precedenza più alta, seguita da &&, poi ||.

Conclusione

Gli operatori logici sono essenziali per costruire condizioni complesse in Go. Sfruttare la valutazione short-circuit può migliorare le performance evitando calcoli inutili, ed è importante conoscere la precedenza degli operatori per evitare errori logici.