Java読書会BOF「Kotlinイン・アクション」を読む会 第4回¶
日時 | 2018年4月21日 10:00 - 17:00 |
場所 | 川崎市教育文化会館 第3会議室 |
出席者(敬称略) | 常念、平山、吉本、井上、加藤、遠藤、藪下、岩室、高橋(智)、高橋(徹) |
第5章 ラムダを使ったプログラミング¶
5.4.2 SAM変換:ラムダの関数型インターフェイスへの明示的な変換¶
5.5.1 with関数¶
5.5.2 apply関数¶
5.6 まとめ¶
- withを導入している言語はほかにある?
- Object Pascal/Delphi、VBA、JavaScript
- 他の言語では、曖昧さ、バグの元なので推奨されないことが多い
- Kotlinの仕様ならば曖昧さはなさそう
- Object Pascal/Delphi、VBA、JavaScript
- 標準関数はどうやって調べるの?
- 一つの方法としてIDE(IntelliJ IDEA等)で宣言にジャンプする
- with関数はStandard.ktに記述されている
- その方法だとコードを書かないと調べられない
- (議事録作成時追記)Kotlin標準ライブラリのリファレンスが次のURLで公開されている
- https://kotlinlang.org/api/latest/jvm/stdlib/index.html
- Packages一覧でkotlinをクリック、Functions一覧でwithをクリックすると定義と説明が参照できる(説明は一文程度)。
- 一つの方法としてIDE(IntelliJ IDEA等)で宣言にジャンプする
第6章 Kotlinの型システム¶
6.1.5 安全キャスト: as?¶
- リスト6.6(次のコード片)で、エルビス演算子に return が書ける! (returnは式?)
val otherPerson = o as? Person ?: return false
6.1.6 非null表明: !!¶
- 【誤植】 p.188 下4 「isEnableよりも複雑になった場合」→「isEnableよりも複雑になった場合」
6.1.7¶
- let関数は、?.で呼び出している
- レシーバがnull許容型だと?.で呼ばないとコンパイルエラー
- P.181の図6.2では、安全呼び出し演算子は、レシーバがnullのときnullが使用されるとあるが、図6.6では、fooがnullのとき「何も起きない」とある。letのときは特殊な処理がある?
- nullとなる。図の書き方に齟齬があるだけでは。
6.1.11 null許容性の区別とJava¶
- 宿題
- プラットフォーム型をnull非許容型変数へ代入するコードをバイトコート上で調べ、どのようなnullチェックが入るか確認する。
- (議事録執筆時追記)Javaから呼ばれるKotlinのクラスのメソッドで次のコードが生成されていた。
invokestatic #15 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V
- p.201 nullを許容しないというアサーションを生成するとあるが、Javaの言語仕様のassertか、一般的な意味のアサーション(表明)かどちらだろう? 上の宿題で確認できるかと。
- (議事録執筆時追記)上述のとおり、assertではなく、kotlin.jvm.internal.IntrinsicsクラスのcheckParameterIsNotNullメソッドが呼ばれていた。このメソッドは引数がnullか判定し、nullなら例外をスローしている。
6.2.3 数値の変換¶
- Kotlinの数値型はJavaのプリミティブ型の名前の先頭を大文字にしたネーミングになっている。
- 【誤植】 p.206 2行目 「42.0L」→「42.0F」
- JavaではHexadecimal floating point Literals があるけどKotlinではどうだろう?
- コンパイルエラーとなった。
6.3.3 KotlinのコレクションとJava¶
- 【誤植】 p.217 表6.1 一番下の行 「masOf」→「mapOf」
- 図6.13 でArrayListはMutableList(インターフェイス)を実装しているが、Javaのクラスでは実装していないはず、どうなっているのかな?
- KotlinのArrayList型はJavaのArrayList型にタイプエイリアスされているから大丈夫なはず
- インターフェイス(MutableListとか)のマッピングもあるのではないか?
本日は、p. 242 7.3.3の手前まで