Java読書会BOF「Kotlinイン・アクション」を読む会 第3回に参加
ちょっと時間が経っちゃいましたが。
議事録はこちら
Java読書会BOF「Kotlinイン・アクション」を読む会 第3回 — Kotlin in Action 1.0 ドキュメント
本書について
- 作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/10/31
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- 日本語で読めるKotlinについて書かれた数少ない技術書の一つ
- 言語設計者の一人、Dmitry Jemerovが執筆に参加
- 日本語訳は四人の著者が翻訳&監訳というスタイルで進めているらしい
勉強会の感想
クラス委譲のbyキーワードが素敵
Decoratorパターンを自動で実装してくれる。
Class DelegetingCollection<T> : Collection<T>{ private val innerList = arrayListOf<T>() override val size:Int get = innerList.size override fun isEmpty():Boolean = innerList.isEmpty() ・・・以後overrideでinnerListに処理を委譲する宣言が延々と続く }
自クラスで実装する必要のない処理をコンポジションのクラスに延々と委譲する実装をひたすら書く必要がありますが、
class DelegatingCollection<T>( innerList:Collection<T> = ArrayList<T>() ) : Collection<T> by innerList{}
これだけでinnerListに処理を委譲するメソッド群が自動生成される。
Effective Javaの影響?
ここでは紹介しませんが、リスト4.22の例はEffective Javaの「継承よりコンポジションを選ぶ」のコード例と全く同じやつですね 他にも直接引用されていたり、随所に影響を受けている跡が見れます。
staticの代替としてのcompanion object
kotlinではstaticメンバが宣言できません。 Javaではファクトリメソッド(valueOf等)や静的な定数(SIZE_OF_XXXX等)などはstaticメンバとして実装しますが、これはkotlinではcompanion object内に宣言します。
companionクラスはobjectに一つだけ定義可能。Kotlinにはstaticがないので忘れることが重要。
他
- 言語仕様:http://jetbrains.github.io/kotlin-spec/
- 137p 「見きました」->誤字では?
- androidはjava8を使っていない?*1
- Oracleとの訴訟がらみのいざこざかな?と思ったが技術的に難しいらしい
逆コンパイル云々
こちらに書きました。
宿題:p166のKotlinのラムダ式をKotlinに逆コンパイル KotlinからKotlinのソースに逆コンパイル(トランスパイル)なことってできるのか? という話になった。 まだやってない(^^;;
Java読書会自体の感想
前から興味がありましたが、遠隔地&メーリングリストがよくわからないので敬遠していました。 別の勉強会で話題に上がったので参加して見ました。
他の勉強会と比べて同業者(SIer)の方が多かったり、当たり前だけどJavaに精通している人が多く、 同じ知識や経験をベースに会話できるのが面白かった。
アーリーアダプターの痛み
すでに仕事でKotlinを使っている人もいるらしい。 Kotlinはまだ新しい技術なので情報が少なく、しぶしぶ1000p近くある洋書を読まれたとか。 勇敢でリスクを負って頑張っている人には、日本で第一人者になる等、是非美味しい思いをしてほしい。
*1:ネットで調べたところ使えるのかどうかよくわからない。