stringtranslate.com

Operador de Elvis

En ciertos lenguajes de programación informática , el operador Elvis , a menudo escrito como ?:, es un operador binario que devuelve el primer operando evaluado si ese operando se evalúa como un valor similar a un valor lógicamente verdadero (según una convención dependiente del lenguaje, en otras palabras, un valor verdadero ), y de lo contrario devuelve el segundo operando evaluado (en cuyo caso el primer operando se evaluó como un valor similar a un valor lógicamente falso , en otras palabras, un valor falso ). Esto es idéntico a un cortocircuito o con semántica de "último valor". La notación del operador Elvis se inspiró en el operador condicional ternario , ? :, ya que la expresión del operador Elvis A ?: Bes aproximadamente equivalente a la expresión condicional ternaria A ? A : B.

El nombre "operador Elvis" se refiere al hecho de que cuando su notación común, ?:, se ve de lado, se parece a un emoticón de Elvis Presley con su peinado característico . [1]

Un operador similar es el operador de fusión de valores nulos , en el que la comprobación de veracidad booleana se reemplaza por una comprobación de valores no nulos . Esto suele escribirse como ??, y se puede ver en lenguajes como C# [2] o Dart . [3]

Sintaxis alternativas

En varios lenguajes, como Common Lisp , Clojure , Lua , Object Pascal , Perl , Python , Ruby y JavaScript , el operador de disyunción lógica (normalmente ||or or) tiene el mismo comportamiento que el anterior: devuelve su primer operando si se evaluaría como un valor verdadero y, en caso contrario, evalúa y devuelve su segundo operando, que puede ser un valor verdadero o falso. Cuando el lado izquierdo es verdadero, el lado derecho ni siquiera se evalúa; se " cortocircuita ". Esto es diferente del comportamiento en otros lenguajes como C/C++, donde el resultado de ||siempre será un booleano (adecuado).

Ejemplo

Variante booleana

En un lenguaje que admita el operador Elvis, algo como esto:

x = f() ?: g()

será xigual al resultado de f()si ese resultado es verdadero, y al resultado de en g()caso contrario.

Es equivalente a este ejemplo, utilizando el operador ternario condicional :

x = f() ? f() : g()

excepto que no se evalúa f()dos veces si arroja un resultado verdadero. Nótese la posibilidad de un comportamiento arbitrario si f()no es una función independiente del estado que siempre devuelve el mismo resultado.

Variante de referencia de objeto

Este código generará una referencia a un objeto que se garantiza que no será nulo. La función f()devuelve una referencia a un objeto en lugar de un valor booleano y puede devolver un valor nulo, que se considera universalmente falso:

x = f() ?: "default value"

Idiomas compatibles con el operador Elvis

Véase también

Referencias

  1. ^ Joyce Farrell (7 de febrero de 2013). Programación en Java . p. 276. ISBN 978-1285081953El nuevo operador se llama operador Elvis porque utiliza un signo de interrogación y dos puntos juntos (?:); si lo miras de lado, te recuerda a Elvis Presley.
  2. ^ "Operador ??". Referencia de C# . Microsoft . Consultado el 5 de diciembre de 2018 .
  3. ^ "Expresiones condicionales". Lenguaje Dart . Google.
  4. ^ "Uso de la colección de compiladores GNU (GCC): Condicionales con operandos omitidos". gcc.gnu.org .
  5. ^ "Uso y portabilidad de la colección de compiladores GNU (GCC): extensiones de C". gcc.gnu.org .
  6. ^ "Operador Elvis (?: )".
  7. ^ "El lenguaje de programación Apache Groovy - Notas de la versión de Groovy 1.5". groovy-lang.org .
  8. ^ "PHP: Operadores de comparación - Manual". Sitio web de PHP . Consultado el 17 de febrero de 2014 .
  9. ^ "Seguridad nula - Lenguaje de programación Kotlin". Kotlin .
  10. ^ Albahari, José; Albahari, Ben (2015). C# 6.0 en pocas palabras (6 ed.). Medios O'Reilly. pag. 59.ISBN 978-1491927069.
  11. ^ Efftinge, Sven. "Xtend - Expresiones". eclipse.org .
  12. ^ "Plantillas de cierre: expresiones". GitHub . 29 de octubre de 2021.
  13. ^ "Operador Elvis - Lenguaje de programación Ballerina". Ballerina . Archivado desde el original el 2018-12-20 . Consultado el 19-12-2018 .
  14. ^ "Operador de fusión nulo (??) - JavaScript | MDN". developer.mozilla.org . Consultado el 5 de enero de 2023 .