Slide 1

Slide 1 text

೥݄೔ौ୩+7. ௕ᖒଠ࿠!OHTX@UBSP ,PUMJO

Slide 2

Slide 2 text

+7.ݴޠʂ ೥Նൃදʂ +FU#SBJOT੡ʂ

Slide 3

Slide 3 text

੩తܕ෇͚ /6--҆શ ΦϒδΣΫτࢦ޲ Ϋϩʔδϟ γϯϓϧ BMU+4

Slide 4

Slide 4 text

ࠓ೔࿩͢͜ͱʂ ֦ுؔ਺ /6--҆શ

Slide 5

Slide 5 text

֦ுؔ਺

Slide 6

Slide 6 text

fun main(args : Array) { "world".hello() / / => Hello, world! } ! fun String.hello() { println("Hello, ${this}!") }

Slide 7

Slide 7 text

/ / Kotlin fun String.hello() { println("Hello, ${this}!") } ! / / Java static void hello(String receiver) {...}

Slide 8

Slide 8 text

/6--҆શ

Slide 9

Slide 9 text

val a: String = null / / NG val b: String? = null / / OK /PU/VMM/VMMBCMF Λ໌֬ʹ۠ผ͢Δ

Slide 10

Slide 10 text

val a: String? = null a.toUpperCase() / / NG /VMMBCMFม਺ʹ͸ ී௨ʹΞΫηεͰ͖ͳ͍

Slide 11

Slide 11 text

val a: String? = null a?.toUpperCase() / / a.map(String::toUpperCase); Ͱ҆શݺͼग़͠ Ϩγʔό͕OVMMͳΒOVMMΛฦ͚ͩ͢

Slide 12

Slide 12 text

val a: String? = null a ?: "" / / a.orElse(""); ͰσϑΥϧτ஋

Slide 13

Slide 13 text

val a: String? = null a!! / / !!!Exception!!! / / a.get(); Ͱڧ੍/PU/VMMԽ ةݥʂݪଇېࢭʂ

Slide 14

Slide 14 text

֦ுؔ਺/6--҆શ

Slide 15

Slide 15 text

֦ுؔ਺MFU͸໾͜ͳ͢ MFU͸ඪ४ϥΠϒϥϦͷؔ਺ w JG1SFTFOU w NBQ w qBU.BQ

Slide 16

Slide 16 text

w JG1SFTFOU w NBQ w qBU.BQ ,PUMJOʹ͸WPJE ͸ͳ͘ɺؔ਺͸ ඞͣ஋Λฦ͔͢ Βಉ͡ ֦ுؔ਺MFU͸໾͜ͳ͢ MFU͸ඪ४ϥΠϒϥϦͷؔ਺

Slide 17

Slide 17 text

w JG1SFTFOU w NBQ w qBU.BQ ʮOVMMͷOVMMʯͱ ͍͏ೖΕࢠߏ଄ʹ͸ ͳΒͳ͍͔Βಉ͡ ֦ுؔ਺MFU͸໾͜ͳ͢ MFU͸ඪ४ϥΠϒϥϦͷؔ਺

Slide 18

Slide 18 text

a?.let { a -> toInt(a) } a?.let { toInt(it) } a?.let(::toInt) MFU࢖༻ྫ ಉ͡ɻ ॻ͖ํ͕ҧ ͏͚ͩ

Slide 19

Slide 19 text

ෳ਺ͷ/VMMBCMFΛ /PU/VMMͱͯ͠ѻ͍͍ͨ

Slide 20

Slide 20 text

a?.let { a -> b?.let { b -> a - b } } ͭͷ*OU B CͷҾ͖ࢉ

Slide 21

Slide 21 text

a?.let { a -> b?.let { b -> a - b } } ͭͷ*OU B CͷҾ͖ࢉ ωετ ಡΈʹ͍͘

Slide 22

Slide 22 text

/ / Ҿ͖ࢉͷؔ਺ ΧϦʔԽ val minus = fun(a: Int) = fun(b: Int) = a - b ! Ҿ਺ͱͯ͠/VMMBCMFͳؔ਺ΛऔΕΔMFUతͳ΍ͭ fun A.bind(f: ((A) -> B)?): B? = f?.invoke(this) ͭͷؔ਺Λ༻ҙ

Slide 23

Slide 23 text

b?.bind(a?.bind(minus)) ωετ͕ফ͑ͨʂ

Slide 24

Slide 24 text

ωετ͕ফ͑ͨʂ ׅހͷରԠؔ܎ͱ͔͆ BCͳͷʹɺొ৔͢Δॱং͕ٯɻ ಡΈʹ͍͘ʂ b?.bind(a?.bind(minus))

Slide 26

Slide 26 text

minus.apply(a)?.apply(b) Ͱ͖ͨʂ NJOVT͔Βελʔτͯ͠ɺBɺC ͷॱͰهड़Ͱ͖Δʂ ϝιουνΣʔϯʹͳͬͯΔʂ

Slide 27

Slide 27 text

ෳࡶ ໘౗͍͘͞ val minus = fun(a: Int) = fun(b: Int) = a - b fun A.bind(f: ((A) -> B)?): B? = f?.invoke(this) fun ((A)->B).apply(a: A?): B? = a?.bind(this)

Slide 28

Slide 28 text

if (a != null && b != null) a - b else null ࣮͸͜Ε͚ͩͰ͓̺

Slide 29

Slide 29 text

࣮͸͜Ε͚ͩͰ͓̺ OVMMͰͳ͍͜ͱ͕อূ͞ΕΔ৔ॴͰ͸ /VMMBCMFม਺Λ/PU/VMMͱͯ͠ѻ͑Δ if (a != null && b != null) a - b else null

Slide 30

Slide 30 text

·ͱΊ ֦ுؔ਺Ͱศརϝιου͕ੜ΍ͤΔʂ /6--҆શ͸҆શͰѻ͍ํ΋؆୯ʂ

Slide 31

Slide 31 text

ࣗݾ঺հ ௕ᖒଠ࿠!OHTX@UBSP ͱ͕େ޷͖ͳΤϯδχΞ 4PGUXBSF%FTJHO ٕධ Ͱ ,PUMJOهࣄΛ࿈ࡌத

Slide 32

Slide 32 text

%SPJE,BJHJ ,PUMJO͸"OESPJE։ൃ΋αϙʔτ ྗೖΕͯΔײ 1MVHJO΍ϥΠϒϥϦͳͲ ౔ ͷ%SPJE,BJHJͰ΋ൃද͠·͢

Slide 33

Slide 33 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ -FU`TFOKPZ,PUMJO