Comparación a tres sentidos
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
editarMuchos 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
editarEn 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
editarReferencias
editar- ↑ «Math::Complex». Perl Programming Documentation.
- ↑ «Spaceship history (was Re: [dart-misc] DEP meeting notes)».
- ↑ «Super Spaceship Operator». 8 de diciembre de 2000.
- ↑ http://hackage.haskell.org/package/base-4.6.0.1/docs/Data-Ord.html#t:Ordering Data.Ord