Comparación (programación)

Comparación en programación  es el nombre general para una serie de operaciones sobre pares de valores del mismo tipo , o con conversión de tipos , que implementan las relaciones matemáticas de igualdad y orden . En lenguajes de alto nivel, estas operaciones suelen devolver un valor booleano ("verdadero" o "falso").

La comparación de objetos escalares (numéricos), punteros y objetos de tipos de datos complejos se considera de manera diferente.

Comparación de tipos de datos escalares

Al comparar objetos de tipos de datos escalares (numéricos), los valores numéricos almacenados se comparan directamente. Los valores numéricos en sí mismos, sin embargo, permanecen sin cambios.

En los lenguajes de bajo nivel, los objetos escalares se escriben en los registros del procesador y, para su comparación, generalmente se usa un comando que establece las banderasCMP del procesador de cierta manera .

Los lenguajes de alto nivel utilizan operadores lógicos que devuelven (al punto de llamada) algún valor que se interpreta como booleano.

Los operadores lógicos implementan las siguientes operaciones de comparación matemática:

En lenguajes de alto nivel, respectivamente, se implementan los siguientes operadores lógicos:

En los lenguajes escritos libremente, el valor devuelto suele ser un número entero, de modo que cero se interpreta como "falso" y cualquier valor que no sea cero se interpreta como "verdadero". En idiomas con escritura más fuerte, se introduce un tipo de datos booleano especial ( booleano en inglés  ), pero es posible convertir otros tipos a booleano.

Comparación de datos no numéricos

Incluso si los argumentos de comparación no son datos numéricos, aún se puede implementar su comparación, incluso como parte del estándar del lenguaje de programación. Cuando se trabaja con objetos complejos, el programa opera con ellos mediante punteros. Por lo tanto, hay al menos dos opciones para comparar datos:

Algunos lenguajes que restringen el manejo de punteros, como Java, aunque no permiten la comparación de operandos de punteros mayores o menores que, permiten verificar la igualdad de punteros.

La comparación de contenido, como la comparación de cadenas, suele estar integrada en la implementación del tiempo de ejecución del lenguaje y puede ser parte del estándar. Sin embargo, la implementación independiente de reglas de comparación de contenido para estructuras personalizadas se permite mediante la sobrecarga de operadores (C) o la definición (redefinición) de métodos ( Object.equalsy la interfaz Comparableen Java). Para los tipos de datos incorporados (por ejemplo String, ), aunque a menudo las reglas de comparación no se pueden anular, se pueden personalizar para el idioma y la configuración regional actuales, y también puede usar sus propias implementaciones de las reglas de comparación con funciones de clasificación (interfaz Comparatoren Java) .

Algunos estándares, como DOM Nivel 3 , definen tipos de equivalencia adicionales. En particular, el estándar DOM Nivel 3 asume que el mismo elemento de un documento puede ser representado por dos o más regiones en la memoria de la computadora. Por lo tanto, se define una operación adicional isSameNode, que es una prueba de igualdad de contenido en términos del lenguaje de programación, pero en realidad es una prueba de equivalencia de puntero en términos del estándar DOM. [una]

En algunos idiomas, los valores que tienen un significado similar, aunque tienen diferentes tipos , por ejemplo, una cadena vacía , una matriz vacía, el número 0, un puntero nulo, falso , también pueden considerarse equivalentes  : tienen el significado de vacío, negación.

Notas

  1. Núcleo del modelo de objeto del documento . Consultado el 11 de febrero de 2010. Archivado desde el original el 11 de febrero de 2010.