Closed19
Kotlinスタートブック -新しいAndroidプログラミングを読んで
第1章 ようこそKotlinの世界へ
2016年2月15日にバージョン1.0が正式リリース
第2章 Koltinを始める
特になし
第3章 Kotlinガイドツアー
特になし
第4章 基本的な文法
- Kotlinでは代入時に暗黙的な型変換は行わない仕様
- raw string
※行頭に|
記号を置いて目印にすることがあるらしい・・・
"""
|It's
|sunny
|today
""".trimMargin()
- 配列は
Array
クラス
第5章 関数
- 可変長引数
fun demo(vararg params: String)
// 関数に配列を可変長引数として渡す場合
demo(*arrays)
- 末尾呼び出し最適化
tailrec fun demo(arg) {
// something process
demo(....)
}
第6章 第1級オブジェクトとしての関数
高階関数は柔軟に振る舞いを構築できる一方で呼び出しコストが高い傾向にある
オブジェクト生成に加えて、クロージャとして構築時の変数の補足をしなければならないため
インライン関数
inline
を付与した関数はコンパイル時にインライン展開されて実行時コストを抑えてくれる
- noinline/crossinlineなるものもある
第7章 オブジェクトからクラスへ
特になし
第8章 クラスとそのメンバ
バッキングフィールド
プロパティに置いて実際の値を格納しておく場所
バッキングフィールドを持つプロパティは必ず初期化が必要
- カスタムゲッター
※バッキングフィールドを持たない形でも定義可能
get() {
return "value"
}
- カスタムセッター
set(value) {
field = value // fieldはバッキングフィールドを表す暗黙の変数
}
第9章 継承と抽象クラス
特になし
第10章 インターフェース
Kotlinにおいては複数インターフェースからデフォルト実装を引き継いだメソッドが暗黙的に最も近い階層で定義された実装(メソッド)がコールされるというJavaのダイヤモンド継承問題が起きないように工夫されている
クラスデリゲーション
委譲におけるボイラーコード(同等メソッドの重複定義)を削減して、簡潔に記述できる
第11章 ジェネリクス
上限境界
class<T: UpperBound> // UpperBoundのサブタイプに縛る
境界を複数指定したい場合はwhere
変位(variance)
- 種類
- 不変(デフォルト)
- 共変(convarinat) = out
- 反変(contravariant) = in
タイプ | 修飾子 | AがBのサブタイプだとして | 可能な操作 |
---|---|---|---|
不変 | なし | X<A>とX<B>の間に関係性はなし | 入出力 |
共変 | out | X<A>はX<B>のサブタイプになる | 出力 |
反変 | in | X<A>はX<B>のスーパータイプになる | 入力 |
- 型投影(type projection)
型に対する可能な操作を制限すること
具象型のランタイム取得
本来はコンパイル時に消去されるジェネリクスの具象型をランタイム(特定の箇所)で取得する方法
inline fun <reified T>
※inline展開されることが必須条件
第12章 Null安全
特になし
第13章 その他の話題
sealed class
直和型=AかBか・・・・Nか
- とりうる型候補を絞れる
- Enumの実装差分を付けれるversionみたいなもの
第14章 AndroidアプリをKotlinで作る
関心対象外のためスキップ
第15章 UIを作成する
関心対象外のためスキップ
第16章 WebAPIを利用する
関心対象外のためスキップ
第17章 テストを実施する
関心対象外のためスキップ
第18章 別のアプローチ
関心対象外のためスキップ
Appendix
kotlin-reflect
リフレクション不要アプリケーションのバイナリサイズ縮小のため別パッケージ?
このスクラップは2022/05/09にクローズされました