Slide 1

Slide 1 text

KOTLIN DSL ύλʔϯ 2019/9/9 Kotlin Fest Rejected Conference 2019 খࢁ ݈ଠ (Koyama Kenta)
 Twitter/Github @doyaaaaaken

Slide 2

Slide 2 text

ࣗݾ঺հ • ׆ಈྖҬɿ
 ɾαʔόαΠυϝΠϯͷϑϧελοΫΤϯδχΞʢͱ͍͏໊ͷͳΜͰ ΋԰ʣ
 ɾSaaSͷ্ཱͪ͛ظ͕޷͖Ͱ3౓΄Ͳܦݧ • झຯɿ
 ɾອըɾϘʔυήʔϜɾຑ੃ɾςχεɾϙʔΧʔ…
 ɾ࠷ۙ͸Kotlin੡OSS΁ͷίϯτϦϏϡʔτ(ktor, Exposed, kotlintest, kohttp)ɺࣗ࡞OSS(kotlin-csv)ͱ͔΋

Slide 3

Slide 3 text

ձࣾ঺հ smartroundגࣜձࣾͰ
 ىۀՈɾ౤ࢿՈؒͷ
 ࢿۚௐୡϓϩηεΛ؅ཧ͢Δ
 SaaSͷ։ൃΛ͍ͯ͠·͢
 ʢktor͕1.0.0-betaͷࠒʹ։ ൃελʔτ͠·ͨ͠ʣ https://jp.smartround.com/

Slide 4

Slide 4 text

ൃදͷΰʔϧ 1. Kotlin DSLʹ͍ͭͯύλʔϯԽ͢Δ͜ͱͰ
 ੔ཧͷखॿ͚ͱͳΔ͜ͱ
 2. ৄࡉͳ࣮૷ํࣜͷΠϝʔδΛ࣋ͬͯ΋Β͏͜ͱ

Slide 5

Slide 5 text

ʢ௒؆୯ʹʣDSLͱ͸ • Domain Specific Languageͷུ • ൚༻ݴޠΑΓɺυϝΠϯಛԽܕݴޠͷ΄͏͕
 ༻్͕໌֬ͰಡΈ΍͍͢ΑͶͱ͍͏࿩ • ϝϦοτͱͯ͠͸… • ʢՄಡੑͷ޲্ʹΑΔʣֶशίετͷ௿ݮ • ʢػೳΛ੍ݶ͢Δ͜ͱͰʣ࣮૷ϛεͷ࡟ݮ

Slide 6

Slide 6 text

DSLྫʢPATTERN1ʣ • kotlintest (should / shouldBe method) •

Slide 7

Slide 7 text

DSLྫʢPATTERN2ʣ • ktor (Routing) •

Slide 8

Slide 8 text

DSLྫʢPATTERN3ʣ • Exposed (DAO API) •

Slide 9

Slide 9 text

DSLΛࢧ͑Δٕज़܈ • infix functionʢதஔه๏ʣ • extension functionʢ֦ுؔ਺ʣ • Lambda as last functionʢؔ਺ͷ࠷ޙͷҾ਺͕Lambdaͷ৔߹ͷলུه๏ʣ • Lambda with receiverʢϨγʔό෇͖Lambdaʣ • Property Delegation ʢϓϩύςΟҕৡʣ • [ࠓճऔΓ্͛ͳ͍΋ͷ] • @DslMarker annotationʢDSL࡞੒࣌ͷείʔϓ੍ޚ༻ͷΞϊςʔγϣϯʣ • type aliasʢܕΤΠϦΞεʣ • inline class ࢀߟ: Deep Dive into Kotlin DSL: https://speakerdeck.com/jmatsu/ri-ben-yu-zhu-shi-tuki-deep-dive-into-kotlin-dsl
 Production Kotlin DSL: https://t.co/W6Th9qv7wQ?amp=1

Slide 10

Slide 10 text

• ͦΕͰ͸ύλʔϯͷઆ໌ʹҠΓ·͢ • શ4ύλʔϯͰ͢ • େମ͸ύλʔϯͱ͍͏ΑΓ͸KotlinͷػೳΛ
 ͦͷ··࢖͍ͬͯΔ͚ͩͰ͢
 ʢ֮͑΍͘͢͢ΔͨΊωʔϛϯάͨ͠ʣ • ※ ύλʔϯͷ໊લ͸͢΂ͯԾ໊ͳͷͰ͝஫ҙ͍ͩ͘͞

Slide 11

Slide 11 text

1. SENTENCE PATTERN • υοτɾׅހແ͠ͷϝιουݺͼग़͠ʹΑΓɺจͬΆ͘͢Δ΍ͭ

Slide 12

Slide 12 text

1. SENTENCE PATTERN

Slide 13

Slide 13 text

2. OPERATOR OVERRIDE PATTERN • +, -, * /ͳͲͷԋࢉࢠʹಠࣗͷҙຯΛఆٛ͢Δػೳ

Slide 14

Slide 14 text

2. OPERATOR OVERRIDE PATTERN

Slide 15

Slide 15 text

3. NESTED STRUCTURE PATTERN(1) • ωετʹΑΓߏ଄Խ͞Εͨ৘ใΛදݱ͢Δύλʔϯ

Slide 16

Slide 16 text

3. NESTED STRUCTURE PATTERN(1)

Slide 17

Slide 17 text

3. NESTED STRUCTURE PATTERN(1) ͜Ε͚ͩͰ͸଍Γͳ͍

Slide 18

Slide 18 text

3. NESTED STRUCTURE PATTERN(2) • େ఍ͷ৔߹ωετͷ಺ଆͷείʔϓͰ
 ঢ়ଶΛอ࣋͢Δ͔ϝιουΛఆٛͯ͠΍Δඞཁ͕͋Δ

Slide 19

Slide 19 text

3. NESTED STRUCTURE PATTERN(2)

Slide 20

Slide 20 text

3. NESTED STRUCTURE PATTERN(2) Ϩγʔόͱͯ͠HttpRequestContext͕࢖͑Δ

Slide 21

Slide 21 text

3. NESTED STRUCTURE PATTERN(2) ۭͷHttpRequestContextΛ࡞੒ޙɺlambdaΛ࣮ߦ

Slide 22

Slide 22 text

3. NESTED STRUCTURE PATTERN(2)

Slide 23

Slide 23 text

4. PROPERTY ACCESS DELEGATION PATTERN • ҕৡϓϩύςΟΛ࢖ͬͯϓϩύςΟͷ஋औಘɾηοτ࣌ʹ
 ௥ՃͷॲཧΛ΍Δ

Slide 24

Slide 24 text

4. PROPERTY ACCESS DELEGATION PATTERN

Slide 25

Slide 25 text

HAVE A NICE KOTLIN!