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.
fonte
2015-12-09 16:43:00
Potrebbe fornire un collegamento all'articolo sul supporto di rilascio per incremento/decremento per favore? Sono interessato a leggerlo. – FreeNickname
@FreeNickname, certo, dai uno sguardo: https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md – greenoldman
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