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
リフレクション不要アプリケーションのバイナリサイズ縮小のため別パッケージ?

このスクラップは2ヶ月前にクローズされました
ログインするとコメントできます