Inc / dec vs + = / - =

1

Sto osservando una decisione sul design del linguaggio di programmazione che è difficile da stabilire precisamente perché non sembra esserci alcuna base oggettiva per scegliere un'opzione rispetto all'altra. La domanda è, dato che una lingua non ha un operatore ++ , sarebbe la scelta migliore per un operatore di incremento come in C:

a += 1
a += b

o come in alcune versioni di Pascal:

inc a
inc a b

(E allo stesso modo con -= rispetto a dec ovviamente.)

Considerazioni che posso vedere per inc :

  • Leggermente più corto per il caso tipico in cui il delta è 1.
  • Meno familiare alla maggior parte dei programmatori.
  • Elimina gli operatori *= etc corrispondenti, che sono molto meno usati.

C'è qualcosa che mi manca?

    
posta rwallace 07.01.2012 - 11:47
fonte

3 risposte

8

Penso che inc e dec siano una scelta scadente, per i seguenti motivi:

  • Sono abbreviazioni e abbreviazioni che dovrebbero essere evitate. Allo stesso tempo increase e decrease sarebbero molto da scrivere.
  • Introducono parole chiave extra. Una lingua dovrebbe avere il minor numero possibile di parole chiave, in modo che i programmatori siano il più possibile liberi nella scelta dei nomi.
  • inc a b è un operatore di prefisso binario. Nelle lingue C-style-ish, quasi tutti gli operatori binari sono tutti infissi (eccetto l'accesso agli array).
  • A differenza di += e -= non emergono da una regola, ma vengono scelti arbitrariamente. Una volta compreso che L o= E significa L = L o E , puoi utilizzarlo con qualsiasi operatore. Personalmente uso *= e /= abbastanza spesso (scala su, scala giù), così come ||= (imposta se null (questo in realtà dipende dal linguaggio)), &&= (valido per le condizioni di aggregazione).

L'ultimo punto è il più importante. Quando si progetta una lingua, si desidera che alcune caratteristiche compongano bene piuttosto che avere un sacco di idiosincrasie da memorizzare.
La tua lingua ha operazioni e assegnazioni binarie "pure". E chiunque può scrivere già a = a o b (componendo così in modo esplicito il compito e l'operatore binario o ). Aggiungere inc e dec e whatnot al cocktail non è buono, perché è una scelta non evidente, che copre un singolo caso.
Come esempio di contatore: l'aggiunta di una chiamata per riferimento, ad esempio, consente ai programmatori di caricare il proprio inc se li soddisfa. Questa è una caratteristica potente. Allo stesso modo, anche la combinazione di qualsiasi operatore binario con un operatore di assegnazione è buona, perché funziona con qualsiasi operatore.

    
risposta data 07.01.2012 - 22:51
fonte
3

Come in altri domini, la considerazione primaria dovrebbe essere data agli utenti della lingua e ai loro bisogni e abitudini. Il principio di sorpresa minima suggerisce che si dovrebbe dare la preferenza alla scelta che è coerente con le abitudini attuali dei tuoi utenti, cioè se sono principalmente programmatori C, C ++, Java o Python, += è una scelta migliore.

    
risposta data 07.01.2012 - 12:22
fonte
1

Penso che + = sia più universale, dal momento che puoi estenderlo anche ad altre operazioni senza dover introdurre nuove parole chiave:

* =, & =, | = e altro ...

Non è un problema introdurre un nuovo operatore come * = più tardi, ma l'introduzione di nuove parole chiave è problematica, poiché possono entrare in conflitto con gli identificatori nel codice esistente.

    
risposta data 07.01.2012 - 20:25
fonte

Leggi altre domande sui tag