Operadores de comparación y operadores lógicos en Go
¿Qué es y para qué sirve?
Imagina que estás jugando un videojuego. Para pasar el nivel, necesitas verificar: "¿Tengo suficientes vidas?" o "¿Recogí todas las llaves?". En programación, estas comprobaciones las hacen los operadores de comparación y los operadores lógicos.
Los operadores de comparación son como una balanza. Comparan dos números o valores y dicen: "Sí, es verdad" o "No, es falso". Por ejemplo: "¿5 es mayor que 3?" — sí, es verdad. "¿2 es igual a 10?" — no, es falso.
Los operadores lógicos son como un juez que combina varias comprobaciones. Por ejemplo: "¿Tienes la llave Y sabes la contraseña?" — solo si ambas condiciones son verdaderas, la puerta se abrirá. O: "¿Encontraste el cofre O venciste al dragón?" — si al menos una condición es verdadera, obtienes la recompensa.
¿Para qué sirve esto? Sin ellos, el programa sería como un robot que hace lo mismo sin mirar la situación. Con ellos, puede tomar decisiones: "Si la temperatura supera los 30, enciende el aire acondicionado", "Si el usuario ingresó la contraseña correcta, déjalo entrar a su cuenta personal".
En Go (el lenguaje de programación de Google), estos operadores se ven muy simples y claros. ¡Vamos a entenderlos!
Sintaxis y ejemplos de código
En Go hay 6 operadores de comparación principales y 3 operadores lógicos. Aquí están en la tabla:
| Operador | Significado | Ejemplo | Resultado |
|---|---|---|---|
== |
igual a | 5 == 5 |
true (verdadero) |
!= |
diferente de | 5 != 3 |
true |
> |
mayor que | 10 > 7 |
true |
< |
menor que | 3 < 8 |
true |
>= |
mayor o igual que | 5 >= 5 |
true |
<= |
menor o igual que | 4 <= 9 |
true |
&& |
Y (AND) | (5 > 3) && (2 < 4) |
true |
|| |
O (OR) | (5 > 10) || (2 < 4) |
true |
! |
NO (NOT) | !(5 > 10) |
true |
Ahora veamos ejemplos prácticos. Imagina que estamos escribiendo un programa para verificar la edad de entrada al cine.
package main
import "fmt"
func main() {
// Ejemplo 1: verificación de edad
age := 16
fmt.Println("Edad:", age)
// ¿Puede ver una película con clasificación 18+?
canWatch := age >= 18
fmt.Println("¿Puede ver 18+?", canWatch) // false, porque 16 es menor que 18
// Ejemplo 2: verificación de descuento para estudiantes
isStudent := true
age = 20
// Se da descuento si eres estudiante Y tu edad es menor de 25
hasDiscount := isStudent && (age < 25)
fmt.Println("¿Tiene descuento?", hasDiscount) // true, porque ambas condiciones son verdaderas
// Ejemplo 3: verificación de entrada al club
age = 17
hasParent := true
// Se permite la entrada al club si tienes 18+ O si estás con tus padres
canEnter := (age >= 18) || hasParent
fmt.Println("¿Puede entrar al club?", canEnter) // true, porque hasParent = true
// Ejemplo 4: verificar que un número no es cero
score := 0
isNotZero := score != 0
fmt.Println("¿La puntuación no es cero?", isNotZero) // false, porque score = 0
// Ejemplo 5: condición compleja con negación
isWeekend := false
isHoliday := true
// No es necesario ir a la escuela si hoy es fin de semana O festivo
// Pero queremos verificar lo contrario: "¿Es necesario ir a la escuela?"
mustGoToSchool := !(isWeekend || isHoliday)
fmt.Println("¿Es necesario ir a la escuela?", mustGoToSchool) // false, porque isHoliday = true
}
Observa: en Go, el resultado de una comparación es siempre true (verdadero) o false (falso). Este es un tipo de dato especial llamado bool (nombrado en honor al matemático Boole).
Los operadores lógicos funcionan así:
&&(Y) — da true solo si ambas condiciones son true. Si al menos una es false, el resultado es false.||(O) — da true si al menos una condición es true. Si ambas son false, el resultado es false.!(NO) — invierte el valor: true se convierte en false, false se convierte en true.
Aquí hay otro ejemplo que muestra cómo funciona esto en un programa real:
package main
import "fmt"
func main() {
// Verificación: ¿se puede comprar un boleto para la atracción?
height := 140 // altura en centímetros
age := 10 // edad
// Condición: altura de 120 a 190 Y edad de 8 a 16
canRide := (height >= 120) && (height <= 190) && (age >= 8) && (age <= 16)
fmt.Println("¿Puede montar?", canRide) // true, todas las condiciones se cumplen
// ¿Y si la altura es 110?
height = 110
canRide = (height >= 120) && (height <= 190) && (age >= 8) && (age <= 16)
fmt.Println("¿Puede montar con altura 110?", canRide) // false, la altura es demasiado baja
}
Comparación con Python
Si ya has probado Python, notarás que la idea es la misma, pero hay pequeñas diferencias. Comparemos:
| Acción | Go | Python |
|---|---|---|
| Igual a | == |
== |
| Diferente de | != |
!= |
| Mayor que | > |
> |
| Menor que | < |
< |
| Mayor o igual que | >= |
>= |
| Menor o igual que | <= |
<= |
| Y lógico | && |
and |
| O lógico | || |
or |
| NO lógico | ! |
not |