jueves, 8 de noviembre de 2018

Operadores lógicos en Go

Los operadores lógicos o relacionales, permiten evaluar uno o dos valores, pero, a diferencia de los operadores de comparación, ni realiza una comparación ni evalúa valores numéricos o de cadena, si no valores exclusivamente lógicos.

La utilidad de estos operadores es evaluar condiciones complejas, en las que existen varias circunstancias, estableciendo una relación entre ellas.

Los operadores lógicos o relacionales en Go son los siguientes:

valor1 && valor2   AND/Y
valor2 || valor2   OR/O
!valor             NOT/NO (negación)

Operador && (AND/Y)

El operador && retornará un valor true si los dos valores lógicos comparados valen true.

true  && true   = true
true  && false  = false
false && true   = false
false && false  = false

Operador || (OR/O)

El operador || retornará un valor true si, al menos uno de los dos valores lógicos comparados vale true.

true  || true   = true
true  || false  = true
false || true   = true
false || false  = false

Operador ! (NOT/NO)

El operador ! retornará el valor contrario al evaluado (niega el valor).

!true  = false
!false = true

Precedencia de los operadores

Cuando se evalúa más de una relación, el orden de precedencia será de izquierda a derecha. Se evalúan los dos primeros valores, y el resultado de éste, se evaluará con el tercero, y así, sucesivamente, hasta el final.

true || false && false || true

// Paso a paso
[true || false] && false || true
true && false || true
[true && false] || true
false || true
true
Nota: Se ha utilizado los corchetes para resaltar qué operación se va a realizar.

Si se utiliza los paréntesis, las evaluaciones englobadas entre ellos se priorizarán, también de izquierda a derecha.

true || (false && false) || true || (true && false)

// Paso a paso
true || (false && false) || true || (true && false)
true || [(false && false)] || true || (true && false)
true || false || true || (true && false)
true || false || true || [(true && false)]
true || false || true || false
[true || false] || true || false
true || true || false
[true || true] || false
true || false
true

Ejemplo

package main

import "fmt"

func main() {
   var (
      edadRafael int = 47
      edadNerea  int = 16
      edadGoyi   int = 69
   )

   fmt.Println("Rafael en edad de trabajar: ",
      edadRafael >= 16 && edadRafael <= 67)
   fmt.Println("Goyi en edad de trabajar: ",
      edadGoyi >= 16 && edadGoyi <= 67)
   fmt.Println("Nerea en edad de trabajar: ",
      edadNerea >= 16 && edadNerea <= 67)

   fmt.Println("Rafael mayor de edad: ", !(edadRafael < 18))
   fmt.Println("Goyi mayor de edad: ", !(edadGoyi < 18))
   fmt.Println("Nerea mayor de edad: ", !(edadNerea < 18))

   fmt.Println("true || false && false || true - ",
      true || false && false || true)
   fmt.Println("true || (false&&false) ||true|| (true&&false) - ",
      true || (false && false) || true || (true && false))
}

El resultado será el siguiente:

$ go run oper-logicos.go
Rafael en edad de trabajar:  true
Goyi en edad de trabajar:  false
Nerea en edad de trabajar:  true
Rafael mayor de edad:  true
Goyi mayor de edad:  true
Nerea mayor de edad:  false
true || false && false || true -  true
true || (false && false) || true || (true && false) -  true

Enlaces de interés

No hay comentarios:

Publicar un comentario