KotlinでJUnitするためのライブラリつくったよ〜
作りました。
なぜか?
RobolectricでKotlinしたかったんですが、JUnit(というかhamcrest)が使いづらくて。。
と言っても、1つだけ。
assertThat(actual, `is`(expected))
この`is`
、すっごくイケてないw
is
ってKotlinでは予約語なので、`
で括ってやる必要があるのです。
で、作りました。
その名もknit(ニット)。
かわいいし、字面が Kotlin + JUnit な感じを出しているので気に入っています。
このknitによって、先ほどのコードは次のように記述できます。
actual.should be expected
わぁ、かわいい。
他にもいくつかの便利なAPIを用意しています。
よかったら、コードを読んでみてください。あと☆ください。かわいいアイコンもつくって欲しい。
#DroidKaigi でKotlinの発表してきたよ〜2016
2月18日、19日に開催されたDroidKaigi 2016に行ってきました。 19日には、50分枠でKotlinについて発表しました! スライドは、最後に載せておきます。 動画は後日公開されるようなので、チェックしてみてください。 運営のみなさま、ありがとうございました〜!!
CFP
講演応募は一番乗りでした。 しかも、かなり気合の入った内容で応募しました。 前回のDroidKaigiでKotlinの導入的な話をしたので、 今回はもっと実践的なもの、かつ私ならではの内容になるように意識しました。
発表
15日のKotlin 1.0リリースが影響してか、参加者のKotlinに対する関心の高さが伺えました。
Kotlin枠既に大行列できてるぞ!!! #DroidKaigi #DroidKaigiB
— たくじ (@takuji31) February 19, 2016
DroidKaigiから無事に帰宅。足が痛くて暫く動けそうにないwww 僕が担当した中で最長の待機列だったのは、たろうさんのKotlinのセッションだったと思います。
— ジャバニャン (@pside) February 19, 2016
何回やっても緊張はするものですね。 言葉がすっと出て来ないことが何回かあったし、言い間違えもありましたが、 早口にならず、丁寧にしゃべれたんじゃないかなと思います。
反省点は、少し難しい内容になってしまったかな、というところです。 いや、正確には、対象者や前提知識をもっとアナウンスすべきでした。
再演のご依頼とかあればお気軽にどうぞ!!
懇親会
SWEEEEEEET! 🍣 🍻 🍷 #DroidKaigi pic.twitter.com/XZqNC92E5r
— DroidKaigi(Official) (@DroidKaigi) February 19, 2016
寿司、おいしかったです。 いろんな人とお話しできました。 三日三晩飲んでました(レセプションパーティー含め)。 かんぞうだいじに!
スライド
英語、あるいは技術的な誤りがあったら、ご指摘いただけると嬉しいです。 今回、英語スライドに挑戦してみましたが、日本語スライドと比べると公開したあとの反響が少ないような印象を受けました。 実際はどうなんだろうか。。
"double context extension" pattern (命名適当) #kotlin
任意の型A
の拡張関数の中でエンクロージング型B
のメンバを使いたいとき、
次のようなコードは自然ですが、foo
はB
の中でしか使えなくて不便です。
When we want to use a enclosing type B
's members in any type A
's extension function, the following code looks natural, but it's inconvenient that foo
can be called in only B
.
class B { fun A.foo() {...} }
下記のように同じ定義を繰り返さなくてはなりません。
なぜならFragmentActivity
をいじることはできないからです。
Same definitions repeat as the below code because we cannot modify the sourcecode of FragmentActivity
.
class RedActivity: FragmentActivity() { fun DialogFragment.show(tag: String?) { show(supportFragmentManager, tag) } } class BlueActivity: FragmentActivity() { fun DialogFragment.show(tag: String?) { show(supportFragmentManager, tag) } }
そんなとき2つの提案があります。 1つめはインタフェースを使います。
Now I have two suggestions. The first is way to use a interface.
interface DialogFeature { fun getSupportFragmentManager(): FragmentManager fun DialogFragment.show(tag: String?) { show(getSupportFragmentManager(), tag) } } class RedActivity: FragmentActivity(), DialogFeature { fun showMessage() { myDialog.show("tag") } }
2つめは、拡張関数を返す拡張プロパティを定義することです。
The second is way to define an extension property which return an extension function.
val FragmentActivity.show: DialogFragment.(String?) -> Unit get() = { tag -> show(supportFragmentManager, tag) } class RedActivity: FragmentActivity() { fun showMessage() { myDialog.show("tag") } }
myDialog.show("tag")
はこう解釈できます。
「this.show
プロパティが参照されたので、DialogFragment
の拡張関数を返し、myDialog
をレシーバ、"tag"
を引数として呼び出す」
myDialog.show("tag")
can be interpreted:
"this.show
property was refered so it'll return DialogFragment
's extension function and then call it with myDialog
as a receiver and "tag"
as an argument."
この方法だとIntelliJ IDEAのKotlinプラグインによる補完が効きません。
myDialog.
のあとにサジェストされるメンバに、FragmentActivity
の拡張プロパティであるshow
は表示されません。
Code completion of IntelliJ IDEA Kotlin plugin dose not work in this way.
FragmentActivity
's extension property show
is not suggested as myDialog
's members.
私は後者が好きです。 それっぽく "double context extension" パターンと名付けます。
I prefer the later. Plausibly I named this pattern "double context extension".
(Thank you for reading this to the end. Please point out my English errors to me.)
AndroidでKotlin勉強会 @ Sansan で発表してきたよ〜 #Kotlin_Sansan
発表&企画・運営のお手伝いをして来ました。
昨年10月にSansanさんがKotlin勉強会を企画しているということで、 Kotlinエバンジェリストを自称している私に講演オファーがありました。 企画当初は、基調講演的にKotlinの紹介的な話をする予定でした。
が、偶然勉強会当日にJetBrains社KotlinチームAndroid担当の@yanex_ruさんが来日されているということでしたので*1、基調講演をお願いしたところ快諾していただけました。 @yanex_ruさんの日本語による発表、面白く、すごく勉強になりました!
企画・会場提供していただいたSansanさん、発表された方々、参加者のみなさま、本当にありがとうございました。 次回開催を楽しみに待っています。
私の発表資料
↓あとでフォロー記事書きます。
勉強会レポート
スライドや動画がまとまってるのでぜひご覧ください。
- 【乾杯の音頭は】AndroidでKotlin勉強会@Sansanに参加した【こっとりーん!】 - 僕はここだ!
- AndroidでKotlin勉強会 @ Sansan - magiepooh blog
- Android - Kotlin勉強会に参加した - Qiita
当日の様子
↓@yanex_ruさん発表の冒頭で、いきなり私が呼び出され、Kotlinティーポットをプレゼントしていただきました!ありがとうございます٩(๑>∀<๑)۶
Kotlinティーポット! #Kotlin_Sansan pic.twitter.com/9FIjRr517L
— 山本裕介 Yusuke Yamamoto (@yusuke) January 15, 2016
↓申し込み数はピーク時で60人定員の中100人超という大盛況でした。
Kotlin勉強会楽しかった!立ち見が出るとかすごい!Sansanさん、 @yanex_ru さんありがとうございました! pic.twitter.com/P5m8TvWjMX
— たろう (@ngsw_taro) January 15, 2016
↓おまけ: おいしいもの食べながら@yanex_ruさんにいろんなお話を伺いました。
今日はことりんチームのYanさんたちと夜景の綺麗なお店で高級しゃぶしゃぶと蟹を食べてきたよ~( ;∀;) pic.twitter.com/TwYAB3lMqu
— たろう (@ngsw_taro) 2016, 1月 14
*1:しれっと勉強会に参加登録してて驚きました。