2015-12-09 31 views
13

Questa domanda è relativa a STORIA (non le vostre attuali opinioni sull'argomento).Qual è stato il motivo per cui la valutazione dell'assegnazione Swift è stata annullata?

Durante la lettura del post sull'abbassamento del supporto per gli operatori di incremento/decremento per Swift, leggo tale testo "Swift già devia da C in quanto =, + = e altre operazioni simili ai compiti restituiscono Void (per una serie di motivi)" .

Quindi, in passato, alcuni sviluppatori hanno deliberatamente deciso di valutare gli incarichi a vuoto per alcune ragioni.

E sto cercando quelli storico (ora) motivi. Praticamente come questo thread riguarda i motivi storici di Scala.

+0

Potrebbe fornire un collegamento all'articolo sul supporto di rilascio per incremento/decremento per favore? Sono interessato a leggerlo. – FreeNickname

+1

@FreeNickname, certo, dai uno sguardo: https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md – greenoldman

+0

in C puoi usare qualcosa come se io = 1 {}. il risultato di un compito restituisce il valore che puoi utilizzare. in breve tali dichiarazioni non verranno compilate e la ragione (penso di sì) è quella di evitare effetti collaterali indesiderati. posso essere d'accordo con questa idea, dal lato opposto non vedo davvero, perché ++ i, i ++. --i, io-- dovrebbe essere rimosso dalla lingua. ho letto l'articolo almeno due volte e non è ancora chiaro per me. – user3441734

risposta

14

Almeno una ragione deve essere più sicura nelle operazioni di confronto. Quando si scrive in C, Objective-C, ecc, quante volte avete scritto questo:

if (x = 2) 

invece di

if (x == 2) 

recenti versioni di compilatori hanno introdotto avvertenze specifiche per il caso di cui sopra, ma wow, quel segno di uguale mancante ha causato errori di identificazione nel mio codice nel corso degli anni.

Con il sistema di tipo Swift, questo sarebbe un problema minore, dal momento che il valore restituito molto probabilmente non sarebbe conforme al protocollo BooleanType, ma se lo avesse fatto (if x = false), si potrebbero comunque riscontrare questi bug. Un sacco di Swift è progettato per eliminare le cause comuni di bug che le persone hanno incontrato, incluso questo.

Ciò viene affermato nel libro Swift linguaggio di programmazione, sotto "Basic Operators":

differenza l'operatore di assegnamento in C e Objective-C, l'operatore di assegnamento a Swift non si restituisce un valore. Il affermazione seguente non è valido:

if x = y { 
    // this is not valid, because x = y does not return a value 
} 

Questa caratteristica impedisce l'operatore di assegnazione (=) venga utilizzato da caso quando l'operatore uguale (==) è effettivamente destinato. Con facendo se x = y non valido, Swift ti aiuta a evitare questo tipo di errori nel tuo codice.

Problemi correlati