Yabu.log

ITなどの雑記

Java読書会BOF「Kotlinイン・アクション」を読む会 第3回に参加

ちょっと時間が経っちゃいましたが。

議事録はこちら

Java読書会BOF「Kotlinイン・アクション」を読む会 第3回 — Kotlin in Action 1.0 ドキュメント

本書について

Kotlinイン・アクション

Kotlinイン・アクション

  • 日本語で読める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がないので忘れることが重要。

コンパイル云々

こちらに書きました。

yuyubu.hatenablog.com

宿題:p166のKotlinのラムダ式をKotlinに逆コンパイル KotlinからKotlinのソースに逆コンパイル(トランスパイル)なことってできるのか? という話になった。 まだやってない(^^;;

Java読書会自体の感想

前から興味がありましたが、遠隔地&メーリングリストがよくわからないので敬遠していました。 別の勉強会で話題に上がったので参加して見ました。

他の勉強会と比べて同業者(SIer)の方が多かったり、当たり前だけどJavaに精通している人が多く、 同じ知識や経験をベースに会話できるのが面白かった。

アーリーアダプターの痛み

すでに仕事でKotlinを使っている人もいるらしい。 Kotlinはまだ新しい技術なので情報が少なく、しぶしぶ1000p近くある洋書を読まれたとか。 勇敢でリスクを負って頑張っている人には、日本で第一人者になる等、是非美味しい思いをしてほしい。

*1:ネットで調べたところ使えるのかどうかよくわからない。