Perché non posso usare un operatore come il segno più per concatenare le stringhe? [chiuso]

0

Perché in Objective-C dovremmo digitare riferimenti espliciti a metodi come stringByAppendingString per concatenare stringhe, quando in alcuni altri linguaggi possiamo usare gli operatori per quello?

Ad esempio, Java e C ++ consentono di concatenare semplicemente le stringhe in modo simile al modo in cui i nostri programmi aggiungono due numeri.

    
posta moonman239 25.06.2015 - 09:32
fonte

2 risposte

5

+ è il simbolo di aggiunta . La concatenazione non è un'aggiunta. L'addizione è commutativa ( a + b == b + a ), la concatenazione non è ( "Hello" + "World" != "World" + "Hello" ).

L'uso di + per la concatenazione è semplicemente sbagliato. Altre lingue usano altri operatori per questo motivo, ad es. Haskell usa ++ , IMP, Perl e PHP usano . , Ada e Visual Basic usano & , PL / I usa || , Standard ML usa ^ , Smalltalk usa , e strongzza ha tre operatori di concatenazione di stringhe diverse “Hello” ∥ “World” (semplice concatenazione di stringhe), “Hello” ||| “World” (concatenazione di stringhe con spazi vuoti tra le due stringhe a meno che uno di essi non sia vuoto) e l'operatore di giustapposizione per le stringhe è sovraccaricato come alias per ||| : “Hello” “World” .

A proposito: dubito strongmente che Apple sia responsabile di questa decisione. La concatenazione di stringhe è un'operazione così importante che sono abbastanza sicuro che sia stata aggiunta molto tempo prima che Apple assumesse lo sviluppo di Objective-C, molto probabilmente prima ancora che fosse usato su NeXT.

    
risposta data 25.06.2015 - 10:41
fonte
1

In alcune lingue, l'operatore di concatenazione è solo zucchero sintattico . Ad esempio, in C #:

var a = b + c;

e

var a = string.Concat(b, c);

sono compilati nello stesso codice della lingua intermedia se b e c sono stringhe: + è qui solo per semplificare la vita degli sviluppatori.

Lo zucchero sintattico potrebbe essere bello, ma significa anche che l'azienda che sta sviluppando la lingua dovrebbe trascorrere del tempo:

  • Ridisegnare la lingua per includere la funzione specifica dello zucchero sintattico; solo questo è un compito estremamente complicato.

  • Modifica del compilatore in modo che possa gestire la nuova sintassi.

  • Documentare il nuovo comportamento, incluso il fatto che + è ora commutativa in alcuni casi, ma non in altri e che traduce la documentazione in ogni lingua supportata.

  • Gestire tutti i casi limite; ad esempio, qual è il risultato di "123" + 4 e qual è il risultato di 1 + "234" ?

  • Modifica di tutti gli IDE per supportare la nuova sintassi.

  • Test accurato del compilatore e degli IDE.

L'aggiunta di questa funzionalità significa anche che ci sarebbero inevitabilmente tre tipi di sviluppatori:

  • Quelli che capiranno che l'operatore è zucchero sintattico e come è tradotto dal compilatore,

  • Quelli che non conoscono gli interni, ma sanno come usare l'operatore e cosa comporta,

  • Quelli che non conoscono gli interni e fanno domande come: "Credo che stringa addizione sia lenta, quindi dovrò riscrivere il mio intero codice base per usare string.Concat invece . Sono sulla buona strada? "

Quindi, invece di rendere la vita di tutti più facile, stai spendendo decine di migliaia di dollari per sviluppare una funzione che offusca la lingua .

Questo è anche il motivo per cui le lingue tendono ad usare il minor numero possibile di parole chiave. Più parole chiave significa più opportunità per bug e situazioni poco chiare, e più difficile imparare la lingua con più regole.

    
risposta data 25.06.2015 - 12:07
fonte

Leggi altre domande sui tag