2015-12-09 9 views
13

この質問は約履歴(問題についてのあなたの現在の意見ではありません)。スウィフト譲渡評価が無効になった理由は何ですか?

スウィフトのインクリメント/デクリメント演算子のサポートを廃止することについてのポストを読んでいるうちに、「スウィフトは=、+ =などの代入のような操作がVoidを返すという点で既にCから逸脱しています。

これまでのある時期に、何らかの理由で割り当てを評価することを意識的に決定しました。

そして、私はそれらをの歴史のある(今)の理由で探しています。このスレッドは、Scalaの歴史的な理由からです。

+0

インクリメント/デクリメントのサポートを中止する方法についての記事へのリンクを提供してください。私はそれを読むことに興味があります。 – FreeNickname

+1

@FreeNickname、確かに、見てください:https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md – greenoldman

+0

Cで何かを使うことができますlike if i = 1 {}。代入の結果は、使用できる値を返します。迅速なそのようなステートメントはコンパイルされませんし、理由(私はそう思う)は、望ましくない副作用を避けることです。私はこのアイデアに同意することができます。反対側の私は実際には見えません。なぜ++ i、i ++。 --i、i--は言語から削除する必要があります。少なくとも2回は記事を読んでいて、それはまだ私には分かりません。 – user3441734

答えて

14

少なくとも1つの理由は、比較操作においてより安全であることです。コンパイラの

if (x = 2) 

代わりの

if (x == 2) 

新しいバージョンは、上記の場合の具体的な警告を導入している、しかし:あなたがこれを書いた回数、C、Objective-Cの、などに書き込むとき私のコードでは何年もの間にバグを識別するのが困難でした。

スウィフトタイプのシステムでは、返される値がBooleanTypeプロトコルに準拠していない可能性が高いため、これは問題ではありませんが、(if x = false)の場合でも、これらのバグが発生する可能性があります。多くのSwiftは、これを含め、人々が遭遇したバグの共通原因を取り除くように設計されています。

これはスウィフトプログラミング言語の本に記載されている、"Basic Operators"下:CとObjective-Cの代入演算子とは異なり

、スウィフトの代入 オペレータは、それ自体が値を返しません。次 文は有効ではありません。

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

この機能は、演算子(==)に等しいが、実際に意図されている場合 事故によって使用されているから、代入演算子(=)を防ぐことができます。 x = yが無効な場合、Swiftはこの種の エラーをコード内で回避するのに役立ちます。

関連する問題