ことりんの等価、レンジ、タプル
今回はKotlinのちょっと細かいところについて。
※英語、または技術的な知識が至らず、内容に誤りが含まれるおそれがありますので、ご了承ください
※本エントリの8割は参考サイトの翻訳です。残りの2割は私の解釈で加筆や変更を施した構成です。
等価
参考サイト http://confluence.jetbrains.net/display/Kotlin/Basic+operations
Kotlinでは、等価(Equality)に2つの種類があります。
- 参照の等価性(2つの参照が同一のオブジェクトを指しているか)
- 構造の等価性(equals()関数によってチェックする)
参照の等価性
Kotlinには参照の等価性をチェックするための組み込み演算子は存在しません。代わりに、identityEquals()というインライン関数があります(インライン関数については1月9日の記事を参照)。次のコードを見てください*1。
a.identityEquals(b)
// or
a identityEquals b // infix call
構造の等価性
構造の等価性のチェックには == を、非等価には != を使用します。nullとの比較のときに注意してください。 a == null と記述されたコードは自動的に a.identityEquals(null) に変換されます。つまり、どちらの記述をしても同じです。
レンジ
レンジは rangeTo()関数(..演算子に対応)により形成されます。
if(n in 1..10) { println("1以上10以下の数です") }
var sum = 0 for(n in 1..10) { sum += n } println(sum) //1から10までの和
rangeTo()関数が返す型の共通の規則
- Intのように列挙可能な型では、raengeTo()は IterableRangeオブジェクトを返します。IterableRangeはcontains()関数(in演算子に対応)による範囲チェックと、iterator()関数による反復処理をサポートしています。
- その他の型(StringやDoubleなど)では、contains()のみサポートするRangeオブジェクトを返します。
タプル
参考サイト http://confluence.jetbrains.net/display/Kotlin/Tuples
関数から複数の値を返したい場合など、一緒にデータを扱う軽量なメカニズムをタプルは提供します。