it-swarm-es.com

¿Qué tan útiles son los operadores infijos en un lenguaje de programación?

¿Qué tan útiles son los operadores infijos en un lenguaje de programación? ¿Merecen la pena la complejidad adicional que proporcionan? ¿Puede proporcionar algún ejemplo en el que los operadores infijos se adapten mejor al problema que no se puede resolver simplemente sobrecargando a los operadores normales?

13
Casebash

Creo que los operadores infijos provienen de las matemáticas.

Esta:

2 + 3 * 4

es más legible para la mayoría de las personas que

(+ 2 (* 3 4))

porque la mayoría de la gente está familiarizada con las matemáticas.

Lo suficientemente interesante en Haskell es que puedes saltar entre infijo y prefijo. Esto está usando la misma función "(+)":

(+) 1 2
1 + 2

y esto está usando la misma función "elem":

elem 42 [1,2,42]
42 `elem` [1,2,42]
16
LennyProgrammers

La única razón real para los operadores infijos es que los humanos generalmente los encuentran más fáciles de leer. Esto se debe principalmente a dos hechos:

  • Aprendemos operadores infijos en forma matemática desde una edad temprana y, por lo tanto, estamos familiarizados con ellos: 2 * 2 = 4 etc.
  • Un operador infijo tiene la ventaja de separar "visualmente" dos argumentos. p.ej. (some complex expression) + (some other complex expression)

Desde una perspectiva lógica/de máquina, los operadores infijos realmente no agregan ningún valor y, en algunos casos, son una molestia:

  • Siempre puede convertir de infijo a una llamada de función equivalente con dos argumentos, por lo que los operadores infijos nunca son más que "azúcar sintáctico"
  • Infix puede ser un inconveniente cuando desea utilizar más de dos parámetros. (* 1 2 3 4 5) en LISP, por ejemplo, es posiblemente una sintaxis mucho más limpia para multiplicar un conjunto de números.
  • Desde una perspectiva de análisis, a menudo es útil leer el operador primero para saber cómo interpretar el resto de la expresión. Con los operadores infijos esto puede ser mucho más complejo (por ejemplo, debe mantener una pila o algo similar para averiguar qué operador se aplica a qué argumentos)
  • En lenguajes concatenativos/basados ​​en pilas como Forth, desea que el operador se inserte en la pila en último lugar, de modo que ya tenga sus argumentos en la posición correcta. Nuevamente, enterrar al operador en medio de una secuencia de fichas solo complica las cosas.
  • Los operadores infix pueden volverse muy confusos cuando están sobrecargados - ¿qué significa "+" cuando se aplica a dos HashMaps, por ejemplo? Aquí, la comprensión humana intuitiva del operador infijo funciona en su contra porque es fácil asumir un significado que en realidad no se pretendía ...
6
mikera

Los lenguajes de computadora están diseñados para humanos, no para máquinas. Y los humanos están más acostumbrados a infijar operadores que a prefijos o sufijos.

6
Gulshan