Kotlinプログラミング
翔泳社
著者:JoshSkeen、DavidGreenhalgh
監訳者:吉川邦夫
目次
Kotlinの紹介
第1章 最初のKotlinアプリケーション
1.1 InteliJ IDEAをインストールする
1.2 最初のKotlinプロジェクト
1.3 最初のKotlinファイルを作る
1.4 Kotlin REPL
1.5 もっと知りたい?なぜInteliJを使うのか
1.6 もっと知りたい?JVMをターゲットとする
1.7 チャレンジ!REPLで算数
第2章 変数と定数と型
2.1 型
2.2 変数を宣言する
2.3 Kotlinの組み込み型
2.4 リードオンリー(読み出し専用)変数
2.5 型推論
2.6 コンパイル時定数
2.7 Kotlinのバイトコードを調べる
2.8 もっと知りたい?KotlinにおけるJavaのプリミティブ型
2.9 チャレンジ!hasSteed
2.10 チャレンジ!ユニコーンの角
2.11 チャレンジ!魔法の鏡
第3章 条件文
3.1 if/else文
3.2 もっと条件を追加する
3.3 ネストしたif/else文
3.4 もっとエレガントな条件
3.5 論理演算子
3.6 条件式
3.7 if/else文から波カッコを外す
3.8 範囲
3.9 when式
3.10 文字列テンプレート
3.11 チャレンジ!いくつかの範囲を試してみる
3.12 チャレンジ!オーラを補強する
3.13 チャレンジ!変更可能な状態フォーマット
第4章 関数
4.1 コードを抽出して関数にする
4.2 関数の解体
4.3 関数を呼び出す
4.4 関数へのリファクタリング
4.5 関数を自作する
4.6 デフォルト引数
4.7 単一式関数
4.8 Unit関数
4.9 名前付き引数
4.10 もっと知りたい?Nothing型
4.11 もっと知りたい?Javaにおけるファイルレベルの関数
4.12 もっと知りたい?関数の多重定義
4.13 もっと知りたい?逆引用符で囲んだ関数名
4.14 チャレンジ!単一式関数
4.15 チャレンジ!ファイヤーボーえうの酩酊レベル
4.16 酩酊状態
第5章 無名関数と関数の型
5.1 無名関数
5.2 型推論のサポート
5.3 「関数の受け取る関数」を定義する
5.4 関数のインライン化
5.5 関数リファレンス
5.6 戻り値の型としての関数型
5.7 もっと知りたい?Kotlinのラムダはクロージャ
5.8 もっと知りたい?ラムダvs無名内部クラス
第6章 null安全と例外
6.1 null許容度(nullability)
6.2 Kotlinの明示的なnull許容度
6.3 コンパイル時か、実行時か
6.4 null安全
6.5 例外
6.6 事前条件
6.7 nullは何の役に立つのか?
6.8 もっと知りたい?チェック例外vsチェックされない例外
6.9 もっと知りたい?null許容は、どのように実施されるのか
第7章 文字列
7.1 部分文字列を抽出する
7.2 文字列の操作
7.3 文字列の比較
7.4 もっと知りたい?Unicode
7.5 もっと知りたい?文字列の文字を順番に処理する
7.6 チャレンジ!DragonSpeakの改善
第8章 数
8.1 数値型
8.2 整数
8.3 小数
8.4 文字列を数値型に変換する
8.5 IntをDoubleに変換する
8.6 Doubleのフォーマッティング
8.7 DoubleをIntに変換する
8.8 もっと知りたい?ビット操作
8.9 チャレンジ!残りのパイント数
8.10 チャレンジ!持ち金が足りなくなったら
8.11 チャレンジ!竜貨
第9章 標準関数
9.1 apply
9.2 let
9.3 run
9.4 with
9.5 also
9.6 takeIf
9.7 標準ライブラリの関数を使う
第10章 リストとセット
10.1 リスト
10.2 反復処理
10.3 ファイルをListに読み込む
10.4 分解
10.5 セット(集合)
10.6 whileループ
10.7 break式
10.8 コレクションの変換
10.9 もっと知りたい?各種の配列型
10.10 もっと知りたい?リードオンリーかイミュータブルか
10.11 チャレンジ!タバーンメニューのフォーマット
10.12 チャレンジ!より高度なタバーンメニューのフォーマット
第11章 マップ
11.1 マップの作成
11.2 マップの値をアクセスする
11.3 マップにエントリを追加する
11.4 マップの値を変更する
11.5 チャレンジ!タバーンの用心棒
第12章 クラス定義
12.1 クラスを定義する
12.2 インスタンスを構築する
12.3 クラス関数
12.4 可視性とカプセル化
12.5 クラスプロパティ
12.6 NyetHackをリファクタリングする
12.7 パッケージを使う
12.8 もっと知りたい?varとvalのプロパティを詳しくみる
12.9 もっと知りたい?競合状態に対する防御を固める
12.10 もっと知りたい?パッケージプライベート
第13章 初期化
13.1 コンストラクタ
13.2 初期化ブロック
13.3 プロパティの初期化
13.4 初期化の順序
13.5 初期化の遅延
13.6 もっと知りたい?初期化の落とし穴
13.7 チャレンジ!エクスカリバーの謎
第14章 継承
14.1 Roomクラスを定義する
14.2 サブクラスを作る
14.3 型チェック
14.4 Kotlinにおける型階層
14.5 もっと知りたい?Any
第15章 オブジェクト
15.1 objectキーワード
15.2 ネストしたクラス
15.3 データクラス
15.4 列挙クラス
15.5 演算子の多重定義
15.6 NyetHackワールドを踏査する
15.7 もっと知りたい?構造的な比較を定義する
15.8 もっと知りたい?代数的データ型
15.9 チャレンジ!quitコマンド
15.10 チャレンジ!ワールドマップを実装する
15.11 チャレンジ!鐘を鳴らす
第16章 インターフェイスと抽象クラス
16.1 インターフェイスを定義する
16.2 インターフェイスを実装する
16.3 デフォルトの実装
16.4 抽象クラス
16.5 NyetHackでの戦い
第17章 ジェネリクス
17.1 ジェネリック型を定義する
17.2 ジェネリック関数
17.3 複数のジェネリック型パラメータ
17.4 ジェネリック型の制約
17.5 varargとget
17.6 inとout
17.7 もっと知りたい?reifiedキーワード
第18章 エクステンション
18.1 拡張関数を定義する
18.2 ジェネリックな拡張関数
18.3 拡張プロパティ
18.4 null許容型のエクステンション
18.5 エクステンションの舞台裏
18.6 エクステンションへの抽出
18.7 エクステンションをファイルで定義する
18.8 エクステンションを改名する
18.9 Kotlin標準ライブラリにおけるエクステンション
18.10 もっと知りたい?レシーバ付きの関数リテラル
18.11 チャレンジ!toDragonSpeakエクステンション
18.12 チャレンジ!額縁エクステンション
第19章 関数型プログラミングの基礎
19.1 関数のカテゴリー
19.2 なぜ関数型プログラミングなのか
19.3 シーケンス
19.4 もっと知りたい?プロファイリング
19.5 もっと知りたい?Arrow.kt
19.6 チャレンジ!Mapのキーとあたいの関係を逆転させる
19.7 チャレンジ!関数型プログラミングをTavern.ktに応用
19.8 チャレンジ!スライディングウィンドウ
第20章 Javaとの相互運用性
20.1 Javaクラスとの相互運用
20.2 相互運用性とnull
20.3 型のマッピング
20.4 ゲッター、セッターと相互運用性
20.5 クラスを超えて
20.6 例外と相互運用性
20.7 Javaにおける関数型
第21章 Kotlinで作る最初のAndroidアプリ
21.1 Android Studio
21.2 UIを定義する
21.3 アプリをエミュレータで実行する
21.4 キャラクタ作成
21.5 Activityクラス
21.6 ビューを「配線」する
21.7 「KotlinのAndroid拡張」の合成プロパティ
21.8 クリックリスナを設定する
21.9 保存されたインスタンス状態
21.10 拡張プロパティでリファクタリングする
21.11 もっと知りたい?Android KTXとAnkoライブラリ
第22章 コルーチンの紹介
22.1 キャラクタデータの解析
22.2 実際にデータをフェッチする
22.3 Androidのメインスレッド
22.4 コルーチンを有効にする
22.5 asyncでコルーチンを指定する
22.6 launchとasync/awaitの違い
22.7 関数コールのサスペンド
22.8 チャレンジ!ライブデータ
22.9 チャレンジ!最小限の強さ
第23章 終わりに
23.1 これから進むべき方向
23.2 ちょっと宣伝
23.3 ありがとうございました
付録A もっとチャレンジ
A.1 Exercismで腕を磨く
付録B 用語集
索引