En programación informática , un operador es una construcción del lenguaje de programación que proporciona una funcionalidad que no se puede definir como una función definida por el usuario (por ejemplo, `sizeof` en C ) o cuya sintaxis difiere de la de una función (por ejemplo, la suma infija como en ` a+b.`). Al igual que otros conceptos de lenguajes de programación, el operador tiene un significado generalmente aceptado, aunque debatible, entre los profesionales.
Algunos operadores se representan con símbolos ( caracteres que normalmente no se permiten en un identificador de función ) para permitir una presentación más familiar que la sintaxis típica de las funciones. Por ejemplo, una función que comprueba si un valor es mayor que podría llamarse gt, pero muchos lenguajes proporcionan un operador simbólico infijo para que el código parezca más familiar. Por ejemplo, esto:
if gt(x, y) then return
Puede ser:
if x > y then return
Algunos lenguajes permiten que un operador definido por el lenguaje sea reemplazado por un comportamiento definido por el usuario, y otros permiten el uso de símbolos de operador definidos por el usuario.
Los operadores también pueden diferir semánticamente de las funciones. Por ejemplo, las operaciones booleanas de cortocircuito evalúan los argumentos posteriores solo si los anteriores no son falsos.
Diferencias con respecto a las funciones
Sintaxis
Muchos operadores difieren sintácticamente de las funciones definidas por el usuario. En la mayoría de los lenguajes, una función se escribe con notación prefija, con un nivel de precedencia y asociatividad fijos , y a menudo con paréntesis obligatorios (por ejemplo, ` Func(a)or` (Func a)en Lisp ). En cambio, muchos operadores se escriben con notación infija e implican un uso diferente de delimitadores, como los paréntesis.
En general, un operador puede ser prefijo, infijo, postfijo, matchfix , circunfijo o bifijo, [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] y la sintaxis de una expresión que involucra un operador depende de su aridad (número de operandos ), precedencia y (si corresponde) asociatividad . La mayoría de los lenguajes de programación admiten operadores binarios y algunos operadores unarios , con algunos que admiten más operandos, como el operador ?: en C, que es ternario. Hay operadores unarios prefijos, como el menos unario -x, y operadores unarios postfijos, como el postincrementox++ ; y las operaciones binarias son infijas, como x + yo x = y. Las operaciones infijas de mayor aridad requieren símbolos adicionales, como el operador ternario ?: en C, escrito como – de hecho, dado que este es el único ejemplo común, a menudo se le denomina operador ternario. Sin embargo, las operaciones prefijas y postfijas pueden admitir cualquier aridad deseada, como .a ? b : c1 2 3 4 +
Semántica
La semántica de un operador puede diferir significativamente de la de una función normal. Por ejemplo, la suma se evalúa como una función normal. x + yPuede ser equivalente a una función add(x, y)en el sentido de que se evalúan los argumentos y luego se aplica el comportamiento funcional. Sin embargo, la asignación es diferente. Por ejemplo, dado a = bel objetivo , noa se evalúa. En su lugar, su valor se reemplaza con el valor de . Los operadores de resolución de ámbito y acceso a elementos (como y , respectivamente, en el caso de, por ejemplo , C++ ) operan sobre nombres de identificadores; no sobre valores.bFoo::Bara.b
En C, por ejemplo, el operador de indexación de matrices se puede usar tanto para lectura como para asignación. En el siguiente ejemplo, el operador de incremento lee el valor de un elemento de una matriz y luego le asigna un valor.
++ a [ i ];El operador de C++ permite una sintaxis fluida al admitir una secuencia de operadores que afectan a un único argumento. Por ejemplo:<<
cout << "Hola" << " " << "mundo!" << endl ;polimórfico ad hoc
Algunos lenguajes proporcionan operadores que son polimórficos ad hoc , inherentemente sobrecargados. Por ejemplo, en Java el +operador suma números o concatena cadenas .
Personalización
Algunos lenguajes admiten sobrecarga definida por el usuario (como C++ y Fortran ). Un operador, definido por el lenguaje, puede sobrecargarse para comportarse de manera diferente según el tipo de entrada.
Algunos lenguajes (por ejemplo, C, C++ y PHP ) definen un conjunto fijo de operadores, mientras que otros (por ejemplo, Prolog , [ 6 ] F# , OCaml , Haskell ) permiten operadores definidos por el usuario. Algunos lenguajes de programación restringen los símbolos de los operadores a caracteres especiales como + o :=, mientras que otros permiten nombres como (por ejemplo , Pascal ), e incluso nombres arbitrarios (por ejemplo, Fortran, donde un nombre de operador de hasta 31 caracteres se encierra entre puntos [ 7 ] ).div
La mayoría de los lenguajes no admiten operadores definidos por el usuario, ya que esta característica complica significativamente el análisis sintáctico. La introducción de un nuevo operador modifica la especificación léxica de aridad y precedencia del lenguaje, lo que afecta al análisis léxico a nivel de frase . Los operadores personalizados, especialmente aquellos definidos en tiempo de ejecución, suelen imposibilitar el análisis estático correcto de un programa, dado que la sintaxis del lenguaje puede ser Turing-completa, por lo que incluso la construcción del árbol sintáctico puede requerir la resolución del problema de la parada, lo cual es imposible. Esto ocurre , por ejemplo, con Perl y algunos dialectos de Lisp .
Si un lenguaje permite definir nuevos operadores, la mecánica para hacerlo puede implicar metaprogramación , es decir, especificar el operador en un lenguaje aparte.
coerción operando
Algunos lenguajes convierten implícitamente (también llamados coercionan ) operandos para que sean compatibles entre sí. Por ejemplo, las reglas de coerción de Perl12 + "3.14" hacen que se evalúe como 15.14. El literal de cadena "3.14"se convierte al valor numérico 3.14 antes de aplicar la suma. Además, 3.14se trata como un punto flotante, por lo que el resultado es un punto flotante aunque 12sea un literal entero. JavaScript sigue reglas diferentes, de modo que la misma expresión se evalúa como "123.14"ya que 12se convierte a una cadena que luego se concatena con el segundo operando.
En general, un programador debe conocer las reglas específicas relativas a la coerción de operandos para evitar comportamientos inesperados e incorrectos.
Ejemplos
- Operadores matemáticos
- Aritmética : como la suma,
a + b - Relacional : como mayor que ,
a > b - Lógica : como o
a AND ba && b - Asignación : como por ejemplo o
a = ba := b - Comparación triple (también conocida como nave espacial):
x <=> y
- Operadores de la estructura del programa
- Acceso a campos de registro u objeto : como por ejemplo
a.b - Resolución del alcance : como por ejemplo o
a::ba.b
- Operadores condicionales
- Condicional ternario :
condition ? a : b - Elvis :
x ?: y - Coalescencia nula :
x ?? y
- Operadores notables de C y C++
- Dirección del operador:
&x - Desreferencia :
*p - Coma :
e, f
- Operadores compuestos
- Asignación compuesta (también conocida como asignación aumentada) en C/C++:
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= - Fusionado : como cis x = cos x + i sin x
Características del operador en los lenguajes de programación
La siguiente tabla muestra las características de los operadores en varios lenguajes de programación:
Véase también
Referencias
- ↑ "Formularios de entrada del operador: documentación del lenguaje Wolfram" . reference.wolfram.com .
- ↑ "Manual de Maxima 5.42.0: 7. Operadores" . maxima.sourceforge.net .
- ↑ "Operadores prefijos, posfijos y circunfijos" . mythryl.org .
- ↑ "Operadores" . doc.perl6.org .
- ↑ Pribavkina, Elena V.; Rodaro, Emanuele (2010). "Complejidad de estados de operadores prefijos, sufijos, bifijos e infijos en lenguajes regulares". Desarrollos en teoría del lenguaje . Notas de clase en informática. Vol. 6224. pp. 376–386 . doi : 10.1007/978-3-642-14455-4_34 . ISBN 978-3-642-14454-7.
- ^ "SWI-Prolog - op/3" . www.swi-prolog.org .
- ↑ "Operaciones definidas" . Intel . Consultado el 6 de mayo de 2025 .
- ↑ "UNA INTRODUCCIÓN TUTORIAL AL IDIOMA B" . Archivado del original el 3 de abril de 2017. Consultado el 3 de agosto de 2024 .
- ↑ "Manual B de Thompson" . www.bell-labs.com . Archivado del original el 17 de septiembre de 2024. Consultado el 4 de febrero de 2026 .
- ↑ "PHP: Operadores de control de errores - Manual" . php.net .
- ↑ "Operadores" . docs.perl6.org .
- ↑ "Funciones" . docs.perl6.org .
- 1 2 "Expresiones de operadores - La referencia de Rust" . doc.rust-lang.org . Consultado el 4 de febrero de 2026 .
- ↑ Goldberg, Adele; Robson, David (1983). Smalltalk-80: El lenguaje y su implementación (PDF) . Reading, Mass.: Addison-Wesley. ISBN 0-201-11371-6.
- 1 2 "Documentación - El lenguaje de programación Zig" . ziglang.org . Consultado el 5 de febrero de 2026 .
- Operadores (programación)
- Estructuras de programación