DEV Community

Linive
Linive

Posted on

2

Lógica booleana e operadores lógicos

O assunto de hoje é bem básico, mas é muito importante na programação.

Vamos começar falando da lógica booleana.

Curiosidade: O nome é em homenagem ao George Boole. Um matemático e criador da lógica booleana.

A lógica booleana trabalha com true e false, 0 e 1, ligado e desligado. São apenas dois valores opostos. Nenhuma novidade para nós, já trabalhamos com variáveis booleanas antes.

Bem, agora vamos entrar na parte da lógica...

Se eu falar: Hoje eu vou a praia E ao cinema
Necessariamente eu tenho que ir aos dois lugares. Se eu não for a praia, terei contado uma mentira. Se eu não for ao cinema, a frase também será falsa. Para a frase ser verdade, eu tenho que ir aos dois lugares.

Mas se eu falar: Hoje vou a praia OU ao cinema
Eu só precisarei ir a um dos dois lugares para a frase ser verdade. Não importa qual dos dois, basta ir a praia ou ao cinema.

O "E" e o "OU" são operadores lógicos. Eles são utilizados tanto no dia a dia, quanto na programação, a diferença é que não são representados da mesma forma.

  • && = "E"
  • || = "OU"
  • ! = "NOT"

Alt Text

Hoje eu vou a praia E ao cinema


fuiPraia := true
fuiCinema := true

frase := fuiPraia && fuiCinema

fmt.Println("A frase é", frase)

//Resultaso: "A frase é true"

A frase é verdadeira, pois o operador lógico é o && e as variaveis são true. Um "E" só retornará verdade quando todos os elementos forem verdadeiros, ou seja, basta um false para a frase ser falsa.


fuiPraia := false
fuiCinema := true

frase := fuiPraia && fuiCinema

fmt.Println("A frase é", frase)

//Resultaso: "A frase é false"

Alt Text

O not é a negação de algo. Se uma variavel é true, com o not ela passa a ser false. Ele converte tudo para o oposto.


fuiPraia := false
fuiCinema := true

frase := !fuiPraia && fuiCinema //estou negando a variável praia

fmt.Println("A frase é", frase)

//Resultaso: "A frase é true"

A praia tem seu valor false, mas quando negamos, ela deixa se ser false e passa a ser true. E como já vimos true && true = true


fuiPraia := false
fuiCinema := true

frase := !fuiPraia && fuiCinema //estou negando a variável praia

fmt.Println("A frase é", !frase)//Estou negando a frase

//Resultaso: "A frase é false"

O valor da frase era true, mas estamos negando, então passa a ser false.

Agora vamos testar o && e o ! junto com um if. Lembra do exemplo do post passado?

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 


if fizerSol { 
    fmt.Println("Vou a praia") 

}  else if tenhoDinheiro { 

    if diaDaSemana { 
        fmt.Println("Vou ao cinema")
    } else { 
        fmt.Println("Vou a festa")
    }
} else  { 
    fmt.Println("Ficarei em casa")
}

Ele pode ficar bem mais legível utilizando um operador lógico.

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 


if fizerSol && tenhoDinheiro && !diaDaSemana { 
    fmt.Println("Vou a praia") 

} else if tenhoDinheiro && diaDaSemana  { 
   fmt.Println("Vou ao cinema")

} else if tenhoDinheiro && !diaDaSemana{ 
        fmt.Println("Vou a festa")

}else { 
    fmt.Println("Ficarei em casa")
}

/*
Resultado : Vou a festa
*/

Vamos analisar por partes...

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 

/*Se fizer sol, e se eu tiver dinheiro e não for dia de semana, eu vou a praia*/
if fizerSol && tenhoDinheiro && !diaDaSemana { 
    fmt.Println("Vou a praia") 

} 

Infelizmente, não está fazendo sol, fizerSol := false. Já sabemos que um false já basta para o && ser falso. Então toda a condição do primeiro if será falsa.

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 

/*Se tiver dinheiro e for dia da semana, vou ao cinema*/
...else if tenhoDinheiro && diaDaSemana  { 
   fmt.Println("Vou ao cinema")

}

Eu tenho dinheiro 🙌🏽, tenhoDinheiro := true, mas não é dia da semana diaDaSemana := false. Basta um falso para a condição ser falsa, então não vou ao cinema.

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 

/*Se tiver dinheiro e NÃO for dia da semana, vou a festa*/
...else if tenhoDinheiro && !diaDaSemana{ 
        fmt.Println("Vou a festa")

}

As duas variáveis são verdadeiras. Eu tenho dinheiro e não é dia da semana, então a condição é verdadeira e eu vou a festa 💁🏽‍♂️.

Para finalizar, vamos conhecer o "OU".

Alt Text

Hoje vou a praia OU ao cinema


fuiPraia := false
fuiCinema := true

frase := fuiPraia || fuiCinema 

fmt.Println("A frase é", frase)

//Resultaso: "A frase é true"

Diferente do "E" que precisa de duas verdades, no "OU" uma verdade basta. Só preciso ir a um dos dois ligares e a frase será verdadeira.


fuiPraia := false
fuiCinema := false

frase := !fuiPraia || fuiCinema //estou negando a variável praia

fmt.Println("A frase é", frase)

//Resultaso: "A frase é true"
fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 


if fizerSol || tenhoDinheiro || !diaDaSemana { 
    fmt.Println("Vou a praia") 

}

if tenhoDinheiro || diaDaSemana  { 
   fmt.Println("Vou ao cinema")

}

if tenhoDinheiro || !diaDaSemana{ 
        fmt.Println("Vou a festa")

}

/*
Resultado : 
Vou a praia
Vou ao cinema
Vou a festa
*/

Todos os casos foram verdadeiros utilizando o ||, pois em cada condição tinha pelo menos uma verdade e uma verdade já basta.

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 

/* Se fizer sol OU eu tiver dinheiro OU não for dia da semana, vou a praia.
Não fez sol, mas eu tenho dinheiro e não é dia da semana*/ 
//   false         true             true          
if fizerSol || tenhoDinheiro || !diaDaSemana { 
    fmt.Println("Vou a praia") 
}

/*Se tiver dinheiro OU for dia da semana, vou a cinema.
Eu tenho dinheiro, mas não é dia da semana*/
//     true             false
if tenhoDinheiro || diaDaSemana  { 
   fmt.Println("Vou ao cinema")
}

/*Se eu tiver dinheiro ou não for dia da semana, vou a festa.
Tenho dinheiro e não é dia da semana*/
//   true               true
if tenhoDinheiro || !diaDaSemana{ 
        fmt.Println("Vou a festa")
}

Também podemos utilizar todos os operadores em uma condição:

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 
noite := true


if (fizerSol && tenhoDinheiro) || !diaDaSemana {
    fmt.Println("Vou a praia")
}  

if (tenhoDinheiro || diaDaSemana) && (!fizerSol && !noite) {
    fmt.Println("Vou ao cinema")
}

if (tenhoDinheiro && !diaDaSemana) && noite {
    fmt.Println("Vou a festa")
}

Aqui misturamos todos os operadores, vocês conseguem descobrir qual será a resposta?

A resposta será: Vou a praia / Vou a festa.

Vamos analisar o código...

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 
noite := true

/*Se fizer sol E eu tiver dinheiro, OU for dia da semana, vou a praia*/         
if (fizerSol && tenhoDinheiro) || !diaDaSemana {
    fmt.Println("Vou a praia")
}  

/*Se tiver dinheiro OU for dia da semana, E não fizer sol E não for noite, vou ao cinema*/    
if (tenhoDinheiro || diaDaSemana) && (!fizerSol && !noite) {
    fmt.Println("Vou ao cinema")
}

/*Se tiver dinheiro E não for dia da semana E for noite, vou a festa*/ 
if (tenhoDinheiro && !diaDaSemana) && noite {
    fmt.Println("Vou a festa")
}

Como toda operação matemática, devemos começar pelos parênteses.

fizerSol := false 
tenhoDinheiro := true
diaDaSemana := false 
noite := true


//   (false  &&     true)     
//         false               ||     true  = true
if (fizerSol && tenhoDinheiro) || !diaDaSemana {
    fmt.Println("Vou a praia")
} 

//     (true      ||   false)         (true     &&   false)   
//               true             &&            false         = false   
if (tenhoDinheiro || diaDaSemana) && (!fizerSol && !noite) {
    fmt.Println("Vou ao cinema")
}

//     (true      ||   true)          
//               true             &&   true =  true
if (tenhoDinheiro && !diaDaSemana) && noite {
    fmt.Println("Vou a festa")
}

Espero que tenham entendido a lógica booleana, é um assunto que eu acho muito divertido.

Se quiserem me acompanhar nos estudos, chema mais ✌🏽

Espero que estejam bem e se puder, fiquem em casa 🏡
Até amanhã.
Alt Text

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →