Fundamentos

Operadores de comparación y lógicos

Básicos Definiciones Fundamentos

Entramos de lleno en el mundo de la programación con los operadores de comparación y lógicos, unas de las estructuras que más utilizaremos en el día a día de nuestros programas. Estos operadores tienen sus particularidades y, pese a su nombre y sencillez a la hora de definirlos, siempre son el primer obstáculo para programadores que están iniciándose, sobre todo cuando hablamos de lógica.

Empecemos, primero, con lo más sencillo que son los operadores de comparación. Recuerda que ya hemos visto muchos otros operadores y que puedes ver el índice de contenidos para conocer lo que ya está publicado y lo que está por venir.

Operadores de comparación

También llamados operadores relacionales, se utilizan para comparar dos valores y éstos nos pueden recordar a las matemáticas básicas. Enseguida veremos el porqué.

Se utilizan para las típicas comparaciones de igualdad, desigualdad y tamaño relativo. Es decir y en palabras sencillas como queremos en este blog, para saber si algo es igual, no lo es o es mayor o menor a otra cosa. Veámoslo en nuestro pseudocódigo con lenguaje natural.

Inicialmente definimos dos variables numéricas
PRIMER_VALOR = 5
SEGUNDO_VALOR = 10

Para saber si estos valores son iguales utilizamos...
PRIMER_VALOR == SEGUNDO_VALOR

Para saber si estos valores son distintos utilizamos...
PRIMER_VALOR != SEGUNDO_VALOR
PRIMER_VALOR <> SEGUNDO_VALOR

Para saber si el primer valor es mayor que el segundo utilizamos...
PRIMER_VALOR > SEGUNDO_VALOR

Para saber si el primer valor es menor que el segundo utilizamos...
PRIMER_VALOR < SEGUNDO_VALOR

Para saber si el primer valor es mayor o igual que el segundo utilizamos...
PRIMER_VALOR >= SEGUNDO_VALOR

Para saber si el primer valor es menor o igual que el segundo utilizamos...
PRIMER_VALOR <= SEGUNDO_VALOR

Vayamos por partes, pues es muy posible que algo os haya hecho levantar la ceja. Pese a que estamos expresándonos en pseudocódigo y utilizando así un lenguaje más natural, no hemos podido evitar utilizar cierta simbología de programación para evitar líos.

Igualdad no es asignación

Hemos utilizado en el ejemplo, para definir el operador de igualdad, el símbolo == en lugar de utilizar un símbolo = nada más como habríamos hecho de forma natural. ¿Por qué? Para evitar confundirnos con una asignación. Puesto que ya sabemos, de artículos anteriores que una asignación utiliza el signo =, si en este ejemplo para el operador de comparación hubiéramos utilizado PRIMER_VALOR = SEGUNDO_VALOR muchos lo hubieran podido confundir con una asignación. Pero nosotros queríamos realmente representar el hecho de si eran iguales.

¡Cuidado!
Mucho cuidado a la hora de comparar cadenas de texto. No en todos los lenguajes de programación podemos usar estos operadores de comparación con cadenas de texto, teniendo que utilizar otros métodos.

De igual forma, hay que tener cuidado también a la hora de comparar números decimales debido a las formas de guardar estos números que pueden ser infinitos. Y también a la hora de comparar otros tipos de datos que todavía no hemos visto.

Por ello hemos utilizado el doble símbolo igual, un == estandarizado en los lenguajes de programación para definir el operador de igualdad. Con este símbolo, en cuanto tengamos un poco de práctica leyendo código, enseguida leeremos “si el primer valor es igual al segundo valor” y no lo confundiremos con la asignación.

Un error muy común

Es un error extremadamente común en los programadores que están iniciándose el querer utilizar el operador de igualdad y escribir un simple signo = nada más. Muchos lenguajes “no se quejan” de ésto y os dejarán seguir, pero el programa no hará lo que estáis esperando que haga.

Nota
En muchos lenguajes de programación existe la igualdad estricta y se utiliza el operador ===, tres signos iguales seguidos para ella. Este operador actúa igual que la igualdad pero también compara si el tipo de datos es igual. Es decir, el operador == os dirá que el valor entero 1 es igual a la cadena de texto ‘1’, sin embargo el operador === os dirá que son cosas distintas. Depende mucho de lo que se quiera programar y de la habilidad del programador el hacerlo de una u otra forma, aunque si esperamos siempre recibir el mismo tipo de datos, será mejor utilizar === para comparar.

Desigualdad

La desigualdad también puede que os haya hecho abrir los ojos en el ejemplo que hemos puesto. En lugar de utilizar el típico símbolo ≠, como es un símbolo que no se escribe en un lenguaje de programación hemos utilizado las dos formas más habituales de representarse.

Una forma es con un signo final de exclamación seguida del signo igual, es decir != (la forma más común), aunque en otros sitios también se utiliza la forma <> e incluso en algunos lenguajes se pueden ambas formas.

Nota
Ocurre igual que en la igualdad en cuestión a lo que sería la estricta desigualdad. Así pues, veríamos !== para representarla.

Mayor y menor que

En cuanto a la simbología para expresar mayor, menor, mayor o igual y menor o igual, no nos vamos nada en cuanto a símbolos matemáticos conocidos. Utilizaremos sin problemas los símbolos >, <, >= y <=. Por tanto, aquí no tenemos nada que pueda hacernos mirar de forma extraña.

¿Qué devuelven estos operadores?

Un valor booleano, es decir, nos devuelven si la comparación es verdadera o falsa. Este valor nos será útil para los siguientes operadores que vamos a ver, pues los operadores de comparación y lógicos van muchas veces de la mano.

Operadores lógicos

Entramos en un mundo nuevo, muy cercano a las matemáticas más básicas (o a la propia lógica humana), pero que no se suele dar en los colegios como tal. Un mundo que utilizaremos día sí, día también, en el mundo de la programación. Es el mundo de los operadores lógicos y, sin ellos, la programación sería prácticamente imposible.

Así pues, los operadores de comparación y lógicos van de la mano, pues los segundos beberán de los resultados de los primeros normalmente. ¿Pero cómo “agrupo” dos comparaciones en una sola? Por ejemplo.

Si el coche es rojo y nos hacen un descuento mayor al 5%, cómpralo.

Si el coche es rojo o nos hacen un descuento mayor al 20%, cómpralo.

Si el coche no es rojo, no lo compres.

¿Hemos visto algo extraño, irreconocible o que nos genere mucha dificultad? No. Pues acabamos de utilizar los tres operadores lógicos básicos. Estos son, dicho con palabras comunes, el operador Y, el operador O y el operador NO. Como veis, los hemos utilizado en el ejemplo.

Partamos un poco las frases que hemos indicado. En la primera tenemos “si el coche es rojo”, es decir, tenemos una comparación de igualdad. Podríamos cambiar esa comparación por el símbolo ==. Luego tenemos “nos hacen un descuento mayor al 5%”, de nuevo otra comparación, en este caso de si un valor es mayor a otro. Vamos a cambiarlas y expresarlo así:

Si el coche == rojo Y nos hacen un descuento > 5%, cómpralo

Acabamos de expresar en términos de programación esas simples condiciones.

Operador Y (AND)

Pasemos ahora a ver el operador lógico Y. Imaginemos que ambas comparaciones son verdaderas, es decir, que nos ofrecen un coche rojo (verdadero) y nos hacen un descuento mayor al 5% (verdadero). ¿Cómo agrupamos ambas condiciones? Con esa Y que hemos colocado, que implica que si ambos valores son verdaderos, entonces el conjunto global es verdadero. Prácticamente es similitud del lenguaje real aplicado a conceptos de lógica matemática.

Podemos expresar los valores del operador Y (más conocido como AND por su nombre en inglés) con esta tabla.

Primer valorSegundo valorResultado de la operación
VERDADEROVERDADEROVERDADERO
VERDADEROFALSOFALSO
FALSOVERDADEROFALSO
FALSOFALSOFALSO

Es decir, el operador AND sólo devolverá un valor booleano verdadero si ambos valores son verdaderos, y devolverá falso en todos los demás casos.

Veremos que el operador AND se escribe de diversas formas distintas en los lenguajes de programación. Algunos utilizan las propias palabras AND, otros utilizan el símbolo & de manera individual o de manera doble con &&. Veremos el caso concreto de PHP en su momento.

Operador O (OR)

También dentro de nuestra propia lógica humana, vemos que este operador también va a ser muy sencillo de definir. En este caso, y volviendo al ejemplo anterior, veremos que la condición general se va a cumplir si una de las comparaciones es verdad o lo es la otra. Es decir, con que una de las dos sea verdadera, ya se cumple en general para este operador.

Veamos el operador O (OR en inglés) en la siguiente tabla:

Primer valorSegundo valorResultado de la operación
VERDADEROVERDADEROVERDADERO
VERDADEROFALSOVERDADERO
FALSOVERDADEROVERDADERO
FALSOFALSOFALSO

Vemos claramente que sólo devolveremos la expresión general como falsa en el caso de que ambos valores sean falsos.

Este operador lo podremos encontrar como OR pero también representado con una barra vertical | o por la doble barra vertical ||.

Operador NO (NOT)

El último de los operadores es, simplemente, la negación del valor. Podríamos decir, de forma muy general, que es como colocar un signo menos delante de un número para que su valor sea el contrario. En el ejemplo del coche tenemos, simplemente, que negar la condición para utilizar este operador.

El operador NO (NOT en inglés) se expresa sencillamente:

ValorResultado de la operación
VERDADEROFALSO
FALSOVERDADERO

No hay mucho más que decir en este aspecto, pues es bastante intuitivo. Normalmente lo veremos expresado únicamente colocando un signo de final de exclamación ! antes del valor que queramos negar.

Combinación de operadores lógicos

Podemos encontrarnos en algunos sitios el que existan más operadores lógicos. El ejemplo más general es el operador XOR, también llamado O EXCLUSIVO. Este operador devuelve verdadero únicamente cuando uno de los dos valores es verdadero. Es decir, que verdad XOR verdad devolverá falso, al contrario que con el operador O que hemos visto en líneas anteriores.

Estos operadores se obtienen de los tres operadores básicos, por lo que no vamos a detenernos en ellos. Pero que sepáis, simplemente, que existen.

Los operadores de comparación y lógicos serán base de nuestros programas

Como vemos, los operadores de comparación y lógicos serán básicos en nuestros programas, pues con ellos controlaremos el flujo de nuestras instrucciones. Definir variables en base a unos tipos de datos, operar sobre ellos y compararlos serán las decisiones más habituales que acabarán siendo integradas en las estructuras de control, último paso para empezar a crear programas con mayores intenciones.

Con todo ello, en el próximo artículo empezaremos a ver ya las estructuras de control en nuestros programas.

Deja una respuesta