00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

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.