Quanto sono utili gli operatori infissi in un linguaggio di programmazione?

11

Quanto sono utili gli operatori di infisso in un linguaggio di programmazione? Valgono la complessità extra che forniscono? Potete fornire esempi in cui gli operatori infissi sono più adatti al problema che non può essere gestito semplicemente sovraccaricando i normali operatori?

    
posta Casebash 10.09.2010 - 12:37
fonte

3 risposte

15

Penso che gli operatori infissi derivino dalla matematica.

Questa:

2 + 3 * 4

è più leggibile per la maggior parte delle persone, rispetto a

(+ 2 (* 3 4))

perché molte persone hanno familiarità con la matematica.

Interessante abbastanza in Haskell puoi saltare tra infisso e prefisso. Sta usando la stessa funzione "(+)":

(+) 1 2
1 + 2

e questo sta usando la stessa funzione "elem":

elem 42 [1,2,42]
42 'elem' [1,2,42]
    
risposta data 10.09.2010 - 13:50
fonte
6

I linguaggi del computer sono progettati per gli esseri umani e non per le macchine. E gli umani sono più abituati a infettare operatori rispetto a pre o postfix.

    
risposta data 02.11.2010 - 15:54
fonte
5

L'unica vera ragione per gli operatori di infisso è che generalmente gli esseri umani li trovano più facili da leggere. Questo è in gran parte dovuto a due fatti:

  • Impariamo gli operatori infissi sotto forma di matematica fin da piccoli e quindi li conosciamo: 2 * 2 = 4 ecc.
  • Un operatore infisso ha il vantaggio di separare "visivamente" due argomenti. per esempio. %codice%

Da una prospettiva logica / macchina, gli operatori infissi non aggiungono alcun valore e in alcuni casi sono un fastidio:

  • Puoi sempre convertire da infisso a una chiamata di funzione equivalente con due argomenti - quindi gli operatori infissi non sono mai più di "zucchero sintattico"
  • Infix può essere scomodo quando si desidera utilizzare più di due parametri. (some complex expression) + (some other complex expression) in Lisp, ad esempio, è probabilmente una sintassi molto più pulita per moltiplicare un insieme di numeri.
  • Da una prospettiva di analisi, è spesso utile leggere prima l'operatore in modo da sapere come interpretare il resto dell'espressione. Con gli operatori infissi questo può essere molto più complesso (ad es. Devi mantenere uno stack o qualcosa di simile per capire quale operatore si applica a quali argomenti)
  • Nei linguaggi concatenati / stack come Forth, si desidera che l'operatore sia inserito per ultimo nello stack, in modo che abbia già gli argomenti nella giusta posizione. Ancora una volta, seppellire l'operatore nel mezzo di una sequenza di token, complica solo le cose.
  • Gli operatori di Infix possono diventare davvero molto confusionari quando sono sovraccaricati - cosa significa "+" quando viene applicato a due HashMap, ad esempio? Qui, l'intuitiva comprensione umana dell'operatore infisso funziona contro di te perché è facile assumere un significato che in realtà non era inteso .....
risposta data 26.05.2011 - 22:39
fonte

Leggi altre domande sui tag