Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
3分で作る Kotlin Friendly な API
Report
Hiroshi Kikuchi
Follow
Android Developer at mixi, inc
Mar. 24, 2016
•
0 likes
1 likes
×
Be the first to like this
Show More
•
3,590 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
Spring boot劇的ビフォーアフター
orekyuu
Kotlinあるある言いたい
yy yank
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
Kotlinことはじめ -まずは触って動かしてみよう-
CASAREAL, Inc.
NDS36 Kotlin Cute
Yukiya Nakagawa
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
コルーチンの実装について
Taku Miyakawa
KotlinでWebアプリ開発
Ryo Nakagawa
1
of
34
Top clipped slide
3分で作る Kotlin Friendly な API
Mar. 24, 2016
•
0 likes
1 likes
×
Be the first to like this
Show More
•
3,590 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Engineering
第2回Kotlin勉強会 @ Sansan で発表した(する)資料です。
Hiroshi Kikuchi
Follow
Android Developer at mixi, inc
Advertisement
Advertisement
Advertisement
Recommended
Kotlinソースコード探訪
yy yank
2.6K views
•
70 slides
Kotlinこんなん出ましたけど
yy yank
3.1K views
•
41 slides
Kotlinにお触り
Shinobu Okano
2.7K views
•
49 slides
Kotlinのwebフレームワーク探訪
豊明 尾古
4.1K views
•
25 slides
KuromojiをKotlinで動かす
yy yank
1.4K views
•
26 slides
Kotlin as an AltJS
Shinya Mochida
6.6K views
•
29 slides
More Related Content
Slideshows for you
(20)
Spring boot劇的ビフォーアフター
orekyuu
•
6.3K views
Kotlinあるある言いたい
yy yank
•
3.2K views
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
•
7.6K views
Kotlinことはじめ -まずは触って動かしてみよう-
CASAREAL, Inc.
•
1.7K views
NDS36 Kotlin Cute
Yukiya Nakagawa
•
3.6K views
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
•
4K views
コルーチンの実装について
Taku Miyakawa
•
3.3K views
KotlinでWebアプリ開発
Ryo Nakagawa
•
77 views
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
Hiroshi Toda
•
3.4K views
なるべくコードを書かないAndroid開発
Hiroshi Kikuchi
•
5.9K views
かわいいKotlinでAndroidアプリをつくろう
gyro_s
•
2.1K views
KotlinAndroidLibを使ってみた
豊明 尾古
•
8.5K views
Nespのコード生成
Kouji Matsui
•
2.9K views
Rubyistのためのkotlin紹介
豊明 尾古
•
2.1K views
Kotlinの紹介
豊明 尾古
•
2.1K views
Java で書かれた Android アプリに Kotlin を適用させていく
健一 辰濱
•
2.7K views
Async deepdive before de:code
Kouji Matsui
•
24K views
C#でわかる こわくないMonad
Kouji Matsui
•
22.6K views
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
Hiroshi Toda
•
2K views
CodeIgniter をモダンに改造してみた
Masaru Matsuo
•
5.2K views
Viewers also liked
(20)
RxBinding-kotlin
Satoru Fujiwara
•
5.4K views
Titaniumから脱却している話
Fujita Yuta
•
1.5K views
20150219 ベストアプリ勉強会 アプリ評価を上げて物理でなぐればいい
Kenta Kuwata
•
3.1K views
成長期のスタートアップにおけるチーム開発の罠
Chihiro Asano
•
9K views
kollectionの紹介
Kota Mizushima
•
2.3K views
最新AndroidとIoTプラットフォームの今 (WJ2016)
嶋 是一 (Yoshikazu SHIMA)
•
1.5K views
アプリにおけるデザインリニューアルのベストプラクティス
Shoji Kuroda
•
3K views
SwiftでAndroidアプリ書けるってよ
Syo Ikeda
•
8.7K views
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
Shinobu Okano
•
7.8K views
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
tkawashita
•
3.1K views
ちょっと優しい入力項目
shinya sakemoto
•
4.5K views
Potato03 KotlinでAndroidアプリ開発(後編)
Toshihiro Yagi
•
4.7K views
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Mariko Takatori
•
4.6K views
アプリでもオブジェクト指向エクササイズ(Potatotips#3)
Shoichi Matsuda
•
5.8K views
Office 365-超概要
なおき おさだ
•
7.4K views
Androidオールスターズ2016 yanzm
Yuki Anzai
•
6.9K views
どうしてコードはレガシーになるのか
Hiroshi Kikuchi
•
3K views
Android thingsやってみた
Hiroshi Kikuchi
•
2.7K views
Kotlin/Golang Developer seminor. 「Androidが生み出す開発言語の多様性」 リックテレコム主催
嶋 是一 (Yoshikazu SHIMA)
•
4.2K views
Jvm言語とJava、切っても切れないその関係
yy yank
•
9.7K views
Advertisement
Similar to 3分で作る Kotlin Friendly な API
(20)
Java で書かれたAndroid アプリに Kotlin を適用させていく
健一 辰濱
•
3.9K views
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
Hirotaka Kawata
•
3.2K views
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
•
42.8K views
Build an iOS app with ConcourseCI
健仁 天沼
•
2.5K views
KotlinつかってQiitaクライアント作った時の話
shinnosuke kugimiya
•
7.1K views
Kotlin が公式サポートになったので Kotlin の話
健一 辰濱
•
626 views
iOS開発でのおすすめライブラリと管理
Tomoya Hayakawa
•
765 views
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
Kazumi IWANAGA
•
436 views
Xcode and iTC submission topics
Syo Ikeda
•
1.2K views
20181025 若手LT会 Codableあるある
IgaHironobu
•
52 views
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
•
2K views
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Kazumi IWANAGA
•
86 views
Wantedly - 世界一"いいね!"される 求人サイトの作り方
Yoshinori Kawasaki
•
33.5K views
Dockerだけではないコンテナのはなし
Katsunori Kanda
•
3.9K views
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
genroku
•
394 views
Robotium を使った UI テスト
健一 辰濱
•
1K views
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
Saki Homma
•
3.2K views
iQONの開発手法 at iQONエンジニアセミナー
Imamura Masayuki
•
4.9K views
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
Saki Homma
•
569 views
CodeBuildを身近にするためのはじめの一歩
淳 千葉
•
9.4K views
More from Hiroshi Kikuchi
(12)
Android Developer Toolsのバグを見つけて直してもらった話
Hiroshi Kikuchi
•
4.8K views
今更聞けない? Androidのテストのいろは
Hiroshi Kikuchi
•
10.4K views
新規Androidアプリ開発において何より大切なこと
Hiroshi Kikuchi
•
1.9K views
モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
Hiroshi Kikuchi
•
1.7K views
JUnit5とAndroidのテスト
Hiroshi Kikuchi
•
5K views
KotlinJSって正直どうなん
Hiroshi Kikuchi
•
4K views
画面状態を抽象化してテスタブル設計ライフを送ろう
Hiroshi Kikuchi
•
2.6K views
テストコードをアプリケーションコードと同じ階層に置きたい
Hiroshi Kikuchi
•
4.4K views
Androidの世界を離れて異文化留学してみた
Hiroshi Kikuchi
•
985 views
Designing Auto Generated Codes
Hiroshi Kikuchi
•
1.7K views
C#でiPhone & Androidアプリ!
Hiroshi Kikuchi
•
1.8K views
Ideatter : Tech-on2011決勝でのプレゼン資料
Hiroshi Kikuchi
•
341 views
Advertisement
Recently uploaded
(20)
揭秘英国留学:如何获得利物浦大学毕业证?
yatenf
•
2 views
★可查可存档〖制作俄亥俄大学文凭证书毕业证〗
fgfg45
•
2 views
AI予約サービスのMLOps事例紹介
Takashi Suzuki
•
3 views
★可查可存档〖制作魁北克大学文凭证书毕业证〗
mmmm282537
•
2 views
Supliment5-Radio09(1995).pdf
ivan ion
•
3 views
W&B Seminar #4.pdf
Akira Shibata
•
0 views
《萨德伯里大学毕业证|学位证书校内仿真版本》
124hdjkhas
•
2 views
《萨斯喀彻温大学毕业证|学位证书校内仿真版本》
124hdjkhas
•
3 views
《卡尔顿大学毕业证|学位证书校内仿真版本》
124hdjkhas
•
3 views
《阳光海岸大学毕业证|学位证书校内仿真版本》
hj123saf
•
2 views
★可查可存档〖制作波恩大学文凭证书毕业证〗
tujjj
•
8 views
mabl - 負荷テストにおけるmablのAPIテスト活用_20230525
Yuki Shimizu
•
15 views
揭秘美国留学:如何获得阿拉斯加大学毕业证?
xefexep
•
2 views
SPECIALIZED heavy racks.pdf
FernandoRivasCortes1
•
2 views
《戴尔豪斯大学毕业证|学位证书校内仿真版本》
124hdjkhas
•
3 views
今さら聞けない人のためのDevOps超入門
VirtualTech Japan Inc./Begi.net Inc.
•
8 views
#全套原版1:1精仿怀卡托大学学位证成绩单
b6f0190421d1rma
•
3 views
1525-INSIZE.pdf
Mohanv63
•
1 view
★可查可存档〖制作菲莎河谷大学文凭证书毕业证〗
mmmm282537
•
2 views
무료스포츠중계 〔www,rtЗЗ,top〕코드 b77 플레이보이카지노 ㋁ 황제카지노 ㉤ 나미비아 국가경기 Ⓣ afc윔블던 ㈭ 퀴라소 ㈗ 축구...
ssusere9c2b4
•
3 views
3分で作る Kotlin Friendly な API
3分で作る Kotlin FriendlyなAPI @kikuchy
だれ? • Hiroshi Kikuchi
(@kikuchy) • Diverse, inc. (mixi, inc.) • Androidアプリ作ってます
34301 Lines 432 Files 79.4
Lines/File 6970 Lines 125 Files 55.8 Lines/File
Kotlinは 短く書けて 読みやすい
本題
対象 • Kotlinは使い始めくらいの人 • Androidアプリ作れるくらいにはJavaが使える人 •
Javaでライブラリ作ってる(作りたい)人
Javaのライブラリ 作ってて困ったこと
例:Kenin https://github.com/kikuchy/kenin
// 入力必須で、英字のみもしくは数字のみ可 KeninAndroid.create( mUserId, CompositeCondition.and( Conditions.requireField("require!!!! must
put some value!!"), CompositeCondition.or( Conditions.alphabet(), Conditions.numeric() ) ) );
きもい
// 入力必須で、英字のみもしくは数字のみ可 KeninAndroid.create( mUserId, CompositeCondition.and( Conditions.requireField("require!!!! must
put some value!!"), CompositeCondition.or( Conditions.alphabet(), Conditions.numeric() ) ) ); 作用されるインスタンスが引数から入る 強制逆ポーランド記法 クラス名長い。かと言ってstatic importしまくるのも避けたい…
目的 • 「作用されるもの」をレシーバにしたい! • Builderパターン(や、それに類するもの)を もっと直感的に、読みやすくしたい!
材料 • 拡張関数 • 引数末尾がラムダ式であればメッセージ式の丸括弧を省略できること •
ラムダ式のreturnは省略できること • thisは省略できること • レシーバ指定関数 • 中置換数 • (演算子オーバーロード)
完成予想図 // 入力必須で、英字のみもしくは数字のみ可 userId.kenin { requireField()
and (alphabet() or numeric()) }
読める、読めるぞ!
拡張関数 • TextInputLayoutに新しいメソッド(に見えるstatic メソッド)を生やします // トップレベルで宣言すればいい //
thisでレシーバー(この場合はTextInputLayout型のインスタンス)を参照可能 fun TextInputLayout.kenin(…) = KeninAndroid.create(this, …)
丸括弧の省略 • 最後の引数がラムダ式のとき、メッセージ式の ()
を 省略できる • ブロックのような表記が可能 // 今回は Condition 型が欲しいので、戻り値で受け取るようにする fun TextInputLayout.kenin(init: () -> Condition) = KeninAndroid.create(this, init())
// この時点で、この表記が可能に! userId.kenin { //
ラムダ式末尾のreturnは省略できる CompositeCondition.and( Conditions.requireField(), CompositeCondition.or( Conditions.alphabet(), Conditions.numeric() ) ) }
thisの省略 • staticメソッドのためにクラス名を書きたくない • ブロック内のthisを差し替えてnon-staticな メソッド呼び出しにしてしまえばいい //
このクラスのインスタンスがthisになってくれればいい class Delegated { fun requireField() = Conditions.requireField() fun alphabet() = Conditions.alphabet() fun numeric() = Conditions.numeric() }
レシーバ指定関数 • 関数のレシーバを型宣言で指定できる • 拡張関数とよく似たようなもの //
このクラスのインスタンスがthisになってくれればいい fun TextInputLayout.kenin(init: Delegated.() -> Condition) = KeninAndroid.create(this, Delegated().init())
// 完成は近い! userId.kenin { CompositeCondition.and( requireField(…), CompositeCondition.or( alphabet(), numeric() ) ) }
中置関数 • 拡張関数の一種として中置関数を作ることができる • 引数は必ず1つである必要がある (二項演算でなければならない) •
特定の名前のメソッドを宣言することで演算子の オーバーロードもできるので、それで代用する手もある // 同じようにして or のバージョンも作る infix fun Condition.and(another: Condition) = CompositeCondition.and(this, another)
// 完成!! ✧\ ٩۹(
'ω' )ﻭو //✧ userId.kenin { requireField() and (alphabet() or numeric()) }
DSLのバリエーション
相性がいいものは? • 設定項目が多くて • 構造化が必要かもしれなくて •
Javaで書くとつらいもの
Anko • https://github.com/Kotlin/anko • DSLでAndroidのUIをつくるためのライブラリ •
たろうさんのスライドがあるのでそちらをご参照ください • Ankoは甘くて美味しい~Ankoに見るKotlinの表現力~ #gunosybeer • http://sssslide.com/speakerdeck.com/ntaro/ ankohagan-kutemei-wei-sii-ankonijian-rukotlinfalsebiao- xian-li-number-gunosybeer
kotlinx.html • https://github.com/Kotlin/kotlinx.html • KotlinでDOMツリーを作ることができる •
サーバーサイドでのテンプレート作成はもちろん • KotlinはJavaScriptにもトランスパイルできる、 ということは…!
Kotlin NoSQL • https://github.com/cheptsov/kotlin-nosql •
MongoDBのクエリもDSLで構築可能 • (Mongoは使ったこと無いので詳しいことはわかり ません)
ここが惜しいよKotlin
&& と ||
のオーバーロードは できない? • 四則演算子やほとんどの比較演算子はオーバーロードできるのだけ れど… • Kotlinのリファレンスを見ても、&&と||は記載がない • https://kotlinlang.org/docs/reference/operator- overloading.html • andとかorとか書いてもダメだった • Booleanクラスにはandとorメソッドがある • 諦めも肝心
まとめ • Kotlinの言語機能を駆使すれば可読性が高いDSLも 作れる • JavaライブラリのKotlinラッパーを用意すると Kotlinist達にも親切
こちらもよろしく Kenin real-time validation framework
for Java & Kotlin https://github.com/kikuchy/kenin
@kikuchy
Advertisement