ti-enxame.com

Quão úteis são os operadores infixados em uma linguagem de programação?

Quão úteis são os operadores infixados em uma linguagem de programação? Eles valem a complexidade extra que fornecem? Você pode fornecer alguns exemplos em que os operadores infixos são mais adequados ao problema que não pode ser resolvido apenas sobrecarregando os operadores normais?

13
Casebash

Acho que os operadores de infixo derivam da matemática.

Este:

2 + 3 * 4

é mais legível para a maioria das pessoas, do que

(+ 2 (* 3 4))

porque a maioria das pessoas está familiarizada com a matemática.

Interessante o suficiente em Haskell, você pode pular entre infixo e prefixo. Isso está usando a mesma função "(+)":

(+) 1 2
1 + 2

e isso está usando a mesma função "elem":

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

A única razão real para operadores de infixo é que os humanos geralmente os acham mais fáceis de ler. Em grande parte, isso se deve a dois fatos:

  • Aprendemos operadores de infixo na forma de matemática desde cedo e, portanto, estamos familiarizados com eles: 2 * 2 = 4 etc.
  • Um operador infixo tem a vantagem de separar "visualmente" dois argumentos. por exemplo. (some complex expression) + (some other complex expression)

De uma perspectiva lógica/de máquina, os operadores de infixo não adicionam nenhum valor e, em alguns casos, são um incômodo:

  • Você sempre pode converter de infixo para uma chamada de função equivalente com dois argumentos - então os operadores de infixo nunca são mais do que "açúcar sintático"
  • O Infix pode ser inconveniente quando você deseja usar mais de dois parâmetros. (* 1 2 3 4 5) no LISP, por exemplo, é sem dúvida uma sintaxe muito mais limpa para multiplicar um conjunto de números.
  • Do ponto de vista da análise, geralmente é útil ler o operador primeiro para saber como interpretar o restante da expressão. Com operadores infixos, isso pode ser muito mais complexo (por exemplo, você precisa manter uma pilha ou algo semelhante para descobrir qual operador se aplica a quais argumentos)
  • Em linguagens baseadas em pilha/concatenativas, como Forth, você deseja que o operador seja colocado na pilha por último, de modo que já tenha seus argumentos na posição correta. Novamente, enterrar o operador no meio de uma sequência de tokens só complica as coisas.
  • Os operadores Infix podem ficar muito confusos quando estão sobrecarregados - o que "+" significa quando aplicado a dois HashMaps, por exemplo? Aqui, o entendimento humano intuitivo do operador infixo trabalha contra você porque é fácil assumir um significado que não foi realmente pretendido ...
6
mikera

As linguagens de computador são projetadas para humanos, não para máquinas. E os humanos estão mais acostumados a infixar operadores do que pré ou pós-correções.

6
Gulshan