それは独自の権利や特典Javaからの素敵な移行の両方で素晴らしいことだと同様に一般的にはKotlin内のすべての設計上の決定を感じています。Java開発者として、あなたはあまり定型で、より簡潔なJavaのようKotlinのことを考え、それにコーディングを開始することができ、その後、順調に関数型プログラミングなど、より高度な側面に移動。
そのデザイナーが作ることにした理由を、私はおよそしかし思ったんだけど、一つのことはある==
に同じ動作をequals
し、その後、紹介===
参照等価性チェックのために。私は彼らがあなたのKotlinコードや思考を見た、折り目に他のJava開発者を持参しようと想像することができる「ああ、いや、すべてのそれは呼び出しに等しくあるべき場所に、参照チェックがあります!」
ここでのJava規則から離れて移動するための思考プロセスとは何ですか?ちょうどそれを明確にするために、私は違いが間にあるものを完璧に理解し==
たりequals
と===
Kotlinに、私は、なぜ思ったんだけど。
主な理由は、おそらくそれは、少なくとも簡単なようでなければなりませんので、オブジェクトの平等は、オブジェクトのアイデンティティよりもはるかに頻繁にチェックされています。
私はこの上の決定的な声明を見ていません。しかし、本の中のポインタがありますKotlinでアクション Kotlinチームのメンバーによっては、。セクション4.3.1、導入==
作業は、まずJavaの比較を説明して、それを言います:
Javaで、常に呼び出しのよく知られた練習があります
equals
し、そうすることを忘れるのはよく知られている問題があります。
Javaでは、オブジェクトのアイデンティティを確認するのは簡単です:
if (firstObj == secondObj)
しかし、オブジェクトの等価性をチェックすることは長く、むしろあまり明確です:
if (firstObj.equals(secondObj))
- というか、あなたはNullPointerExceptionが危険にしたくない場合は:
if ((firstObj == null) ? (secondObj == null) : firstObj.equals(secondObj))
あなたはどれだけ多くの種類にある痛みの見たり、権利を取得します。(これらのオブジェクトのいずれかが副作用を持つ式である場合は特に...)
違いを忘れて、そうでないか気にすること、および使用するのは簡単です、それはそう==
代わりに。(スポット、と断続的にかむのは難しい、微妙な原因のバグに可能性が高いです。)
Kotlinは、しかし、1より簡単に、最も一般的な操作を行う:その==
オペレータのチェックは、使用して平等オブジェクトequals()
、そしてあまりにもヌルチェックの世話をします。この修正Javaの「そうするために忘れるの問題」。
Javaコードとの相互運用性は明らかに大きな目標でしたが(そして、ジェットブレーンズはしようとする自分自身を制限するものではありませんでした表情 Javaのような、KotlinはJavaから可能な限り借りたが、良い方向に変化する事に恐れていないあなたはその中を見ることができます。使用するval
とvar
と宣言のタイプを末尾、スコープおよび開放性のために異なるデフォルトは、異なる方法で分散が処理され、&C)。
Kotlinの動機の一つは、Javaでの問題の多くを解決することでした。(実際には、JetBrainsの比較一部のJavaの問題をリストアップすることによって言語が始まるのは、 『』 Kotlinで対処。)変更の背後にある主な理由であると思わので。