En informática, una comparación a tres sentidos toma dos valores A y B pertenecientes a un tipo con un orden total y determina si A < B, A = B o A > B en una única operación, de acuerdo con la ley matemática de tricotomía. El operador para la comparación a tres sentidos de números es tradicionalmente representado por el símbolo <=> (operador de nave espacial o spaceship operator) y es usado en lenguajes como Perl, Ruby, Apache Groovy, PHP y Eclipse Ceylon.[1][2][3]

Computación a nivel de máquina

editar

Muchos procesadores tienen un juego de instrucciones que soporta una operación como esta en tipos primitivos. Algunas máquinas manejan enteros basados en una representación de signo y magnitud o de complemento a uno, los cuales permiten representan un cero positivo y negativo. Esto no viola la ley de tricotomía siempre y cuando se adopte un orden total consistente: tomar como válido −0 = +0 ó −0 < +0. Los tipos de coma flotante, sin embargo, son una excepción a la ley de tricotomía: existe un valor especial "NaN" tal que x < NaN, x > NaN y x = NaN son falsos para todo x (también flotante), inclusive si x toma como valor NaN.

Lenguajes de alto nivel

editar

En C, las funciones strcmp y memcmp realizan una comparación a tres sentidos entre cadenas y búferes de memoria, respectivamente. Estas pueden retornar un número negativo cuando el primer argumento es lexicográficamente más pequeño que el segundo, cero cuando los argumentos son iguales y un número positivo en cualquier otro caso. Esta convención de retornar el "signo de la diferencia" es extendida a las funciones de comparación arbitraria por la función estándar de ordenamiento qsort, la cual toma una función de comparación como argumento. Desde C++20 se incluye el operador de nave espacial <=>, el cual similarmente retorna el signo de la diferencia y también puede retornar diferentes tipos (convertibles a enteros con signo) dependiendo el rigor de la comparación.

En Perl (únicamente para comparaciones numéricas, puesto que cmp se usa para comparación de cadenas), PHP (desde la versión 7), Ruby y Apache Groovy, el operador de nave espacial <=> retorna los valores -1, 0 o 1 dependiendo de si A < B, A = B o A > B, respectivamente. En Python 2.x (removido desde la versión 3), OCaml y Kotlin, las funciones cmp, compare y compareTo, respectivamente, computan lo mismo. En la librería estándar de Haskell, la función de comparación a tres sentidos compare es definida para todos los tipos en la clase Ord; esta función retorna un objeto de tipo Ordering, cuyos valores son LT (less than, menor que), EQ (equal, igual) y GT (greater than, mayor que).[4]

Véase también

editar

Referencias

editar

📚 Artikel Terkait di Wikipedia

Destructor (informática)

de asignación al hacerlos privados */ private: foo( foo const& ); foo& operator = ( foo const& ); }; int main( void ) { foo array[ 3 ]; /* Cuanto la 'main'

SPK (banda)

de Australia. Estuvo formado por Graeme Revell (conocido también como Operator, Oblivion, EMS AKS) y Neil Hill (aka Ne/H/il). Los dos trabajaban en un

C++11

hay forma de plantilla alternativa: OutputType operator "" _suffix(unsigned long long); OutputType operator "" _suffix(long double); OutputType some_variable

General Problem Solver

evolucionó hasta convertirse en la arquitectura simbólico-cognitiva SOAR (State Operator And Result). Simon y Newell proponen el ejemplo sobre cómo transformar

Puntero opaco

Constructor de copia Handle(Handle&&); // Constructor de movimiento Handle& operator=(const Handle&); // Operador de copia por asignación ~Handle(); // Destructor

Interfaz de usuario

interacción humano-ordenador.​ Other terms used are operator interface console (OIC) and operator interface terminal (OIT).​ Sin embargo, se abrevia,

Xojo

una documentación completamente nueva y el nuevo libro Introduction to Programming Using Xojo ​ diseñado para que los principiantes pudiesen aprender los

C++20

lambda​ plantillas (templates) en lambdas​ comparación de tres sentidos con operator <=> una nueva inicialización de variables dentro de un range-based for​