目次
- 目的
- 何となくでやっていたこと,知らなかったこと
- まとめ
1. 目的
Kotlinの文法で,何となくで使っていたところをまとめました.
2. 何となくでやっていたこと,知らなかったこと
Any
‥すべてのクラスのスーパークラス,nullを許容するには**Any?**というスーパークラスが用いられる.
Nothing
‥インスタンスが存在しないクラスのこと.関数で,Nothingがreturnされたら,returnされるものがない.Nothingは,すべてのクラスのサブクラスである.
?
‥nullを許容するために型の後に必要なキーワードで,nullをデフォルトで代入することができないので,nullを許容するために型の後に付ける.関数の引数もデフォルトで,nullを与えることができないのでこのキーワードをつける必要がある.
val
‥参照先のオブジェクトが,この変数を呼び出したときに必要である.変数の参照先のオブジェクトを利用することを知らなかった.
lateinit
‥val変数の生成時に,参照先のオブジェクトが必要となりますが,変数の初期化が行えない場合は,lateinitを使って初期化を遅延することができる.このキーワードを利用すると,初期化時にnon-nullであることが担保されます.また,参照するには,必ず初期化が行われていることを確認する必要がある.(インスタンスとして,生成処理を行っているか)
vararg
‥可変長引数を表現するためのキーワード,任意の長さの引数を渡すことができる.また,varargを用いて引数を表すと,配列型のオブジェクトとして参照することができる.
fun greet(vararg name: String) {
if (name.isNotEmpty()) {
println("Hello $name")
}
}
inline fun
‥インライン関数として呼び出すことができる.目的としては,実行速度を向上できる,3つも特徴がある.呼び出す関数の内容に対する型情報が埋め込まれる,ラムダで行うループの処理を,returnで抜けることができる.(noinline, crossinlineで,非局所リターンを防止できる),引数で与えたラムダの型が保存されることで,呼び出し時のコストが低下することで,実行速度が向上する.繰り返しの処理をする際に,inlineで呼び出すことで,3つの利点が得られる可能性がある.
forEach
‥forのように,breakができない.return@forEachをしても,ループの処理が止まることはない.また,forは,{}以降の処理をループで実行しているが,forEachは,単にラムダの中の処理を繰り返し行っていることも違いの一つである.
try-catch, throw‥例外を投げる投げないを呼び出し先で決めることができる.スローされなかった例外は,try-catchまで伝播することができる.だから,それぞれの関数で,例外を投げなくてもよい.
classがデフォルトで,public final
‥publicでのメリットは,暗黙的にゲッター,セッターを利用することができることが強みである.
sealed class, enum の違い
‥シングルトンとして利用することもできる,個別のインスタンスとしても利用が可能であること.
setter field
‥var で定義したプロパティをセッターを使って定義したいときは,fieldというキーワードを用いること.
sort, sortedByの違い
‥sortは,リストに変更を加えて物を返し, sortedByは,リストを変更せずに戻り値のみを返す.
class名を取得する
‥companion object で、Tag(変数)に対して,Example::class.java.simpleNameを代入することで,クラス名をTagとして取得することができる.
3. まとめ
雰囲気で使わないように,よくわかっていないところを改めてまとめてみました.これまでの経験と知識が結びつくような勉強となったので,これから雰囲気で使わないようにわからないことを適宜調べながら使っていきます.