Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2019 kotlin-rejected-fest-doyaaaaaken

7,132 views

Published on

Kotlin Fest Reject Conference 2019 [非公式]での発表資料 by @doyaaaaaken

Published in: Software
  • Be the first to comment

2019 kotlin-rejected-fest-doyaaaaaken

  1. 1. KOTLIN DSL パターン 2019/9/9 Kotlin Fest Rejected Conference 2019 小山 健太 (Koyama Kenta) Twitter/Github @doyaaaaaken
  2. 2. 自己紹介 • 活動領域: ・サーバサイドメインのフルスタックエンジニア(という名のなん でも屋) ・SaaSの立ち上げ期が好きで3度ほど経験 • 趣味: ・漫画・ボードゲーム・麻雀・テニス・ポーカー… ・最近はKotlin製OSSへのコントリビュート(ktor, Exposed, kotlintest, kohttp)、自作OSS(kotlin-csv)とかも
  3. 3. 会社紹介 smartround株式会社で 起業家・投資家間の 資金調達プロセスを管理する SaaSの開発をしています (ktorが1.0.0-betaの頃に開 発スタートしました) https://jp.smartround.com/
  4. 4. 発表のゴール 1. Kotlin DSLについてパターン化 ⇒ 記憶・整理の手助けとなる 2. 詳細な実装方式を紹介 ⇒ 明日から書きたくなる
  5. 5. DSL例1 • kotlintest (testing library)
  6. 6. DSL例2 • ktor (web framework)
  7. 7. DSL例3 • Exposed (O/R Mapper)
  8. 8. • よく見るパターンを4つ紹介します • 覚えやすいようにパターンには仮の名前をつけてます • Kotlinの機能をそのまま使っているものも 便宜上パターンと呼んでいます • ちなみにMartinFowlerは50パターンぐらい紹介してましたw https://martinfowler.com/dslCatalog/
  9. 9. 1. SENTENCE PATTERN • ドット・括弧無しのメソッド呼び出しにより、文っぽくするやつ
  10. 10. 1. SENTENCE PATTERN
  11. 11. 2. OPERATOR OVERRIDE PATTERN • +, -, * /などの演算子に独自の意味を定義する機能
  12. 12. 2. OPERATOR OVERRIDE PATTERN
  13. 13. 3. NESTED STRUCTURE PATTERN(1) • ネストにより構造化された情報を表現するパターン
  14. 14. 3. NESTED STRUCTURE PATTERN(1)
  15. 15. 3. NESTED STRUCTURE PATTERN(1) これだけでは足りない
  16. 16. 3. NESTED STRUCTURE PATTERN(2) • 大抵の場合ネストの内側のスコープで 状態を保持するかメソッドを定義してやる必要がある
  17. 17. 3. NESTED STRUCTURE PATTERN(2)
  18. 18. 3. NESTED STRUCTURE PATTERN(2) レシーバ付きLambda (拡張関数Lambdaという理解でOK)
  19. 19. 3. NESTED STRUCTURE PATTERN(2) 空のHttpRequestContextを作成後、拡張関数lambdaを実行
  20. 20. 3. NESTED STRUCTURE PATTERN(2) レシーバとしてHttpRequestContextが使える ⇒ 結果スコープ内でのみ利用できる Mutableなオブジェクトとなる
  21. 21. 3. NESTED STRUCTURE PATTERN(2)
  22. 22. 4. PROPERTY ACCESS DELEGATION PATTERN • 委譲プロパティを使ってプロパティの値取得・セット時に 追加の処理をやる
  23. 23. 4. PROPERTY ACCESS DELEGATION PATTERN
  24. 24. HAVE A NICE KOTLIN!

×