Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Functional Kotlin makes Kotlin functional

Functional Kotlin makes Kotlin functional

KotlinConf 2023 Global in Songdo에서 발표한 코틀린 함수형 프로그래밍 발표 자료입니다.

HyunWoo Lee

May 12, 2023
Tweet

More Decks by HyunWoo Lee

Other Decks in Programming

Transcript

  1. @l2hyunwoo


    KotlinConf’23 Global in Songdo


    Mathpresso Inc. Android/React Native Developer
    Functional Kotlin


    Makes


    Kotlin functional


    HyunWoo Lee

    View Slide

  2. ೣࣻഋ ೐۽Ӓې߁җ য়೧
    Lambda Algebra Monoid
    Functor / Applicative Functor Tail recursion
    Currying

    View Slide

  3. ೣࣻഋ ೐۽Ӓې߁җ য়೧
    Lambda Algebra Monoid
    Functor / Applicative Functor Tail recursion
    Currying
    ੿݈ ੉ѱ पઁ ѐߊী ੄޷о ੓ਸөਃ?

    View Slide

  4. ೣࣻഋ ೐۽Ӓې߁ ੽Ӕ
    ݾ੸ਸ ੉೧ೞҊ


    যڌѱ ࢎਊ೧ঠೡ ૑ ঌইঠ ೞݴ


    Ӓ ੉റী ޖ঺੉ ੓ח ૑ ౵ঈ೧ب ן૑ ঋ׮

    View Slide

  5. Why we should use it?
    ೣࣻഋ ೐۽Ӓې߁ਸ ഝਊೞݶ


    ௏٘ܳ рѾೞѱ ੘ࢿೡ ࣻ ੓Ҋ ӝמ੄ ഛ੢੉ ए਋ݴ


    ࠁ׮ উ੹ೠ ௏٘ܳ ੘ࢿೡ ࣻ ੓׮

    View Slide

  6. рѾೠ ௏٘ ੘ࢿೞӝ

    View Slide

  7. рѾೠ ௏٘ ੘ࢿೞӝ

    View Slide

  8. рѾೠ ௏٘ ੘ࢿೞӝ

    View Slide

  9. рѾೠ ௏٘ ੘ࢿೞӝ

    View Slide

  10. ߸زਸ ઴੉ݶࢲ উ੿ࢿ ֫੉ӝ

    View Slide

  11. ߸زਸ ઴੉ݶࢲ উ੿ࢿ ֫੉ӝ

    View Slide

  12. ߸زਸ ઴੉ݶࢲ উ੿ࢿ ֫੉ӝ
    ё୓/৻ࠗ ࢚క੄


    ߸ز੉ ੓ח ࠗ࠙਷


    ࠶۾ Scopeਵ۽


    Ѻܻೠ׮

    View Slide

  13. ਫ਼Ӭ! ੉Ѣ ೣࣻഋ ೐۽Ӓې߁੉ ݏաਃ?
    Functional Programming is sometimes treated as synonymous with


    Purely functional programming.


    When a pure function is called with some given arguments,


    it will always return the same result,


    and cannot be affected by any mutable state or other side effect.


    -
    Hudak, Paul (Conception, evolution and application of functional programming lauguages)

    View Slide

  14. Pure Function and Side Effect
    function sum(x: int, y: int)

    View Slide

  15. Pure Function and Side Effect
    function sum(x: int, y: int)
    (
    2, 5
    )

    View Slide

  16. Pure Function and Side Effect
    function sum(x: int, y: int)
    (
    2, 5
    )
    7

    View Slide

  17. function sum(x: int, y: int)
    (
    2, 5
    )
    7
    ੑ۱੉ زੌೞݶ


    Ѿҗо ೦࢚ э਷ ೣࣻܳ


    ࣽࣻ ೣࣻ
    (
    Pure Function)


    ۄ ೠ׮
    Pure Function and Side Effect

    View Slide

  18. Pure Function and Side Effect
    function sumWithSideEffect(x: int, y: int)

    View Slide

  19. Pure Function and Side Effect
    function sumWithSideEffect(x: int, y: int)
    (
    2, 5
    )
    1st

    View Slide

  20. Pure Function and Side Effect
    function sumWithSideEffect(x: int, y: int)
    (
    2, 5
    )
    7
    1st

    View Slide

  21. Pure Function and Side Effect
    function sumWithSideEffect(x: int, y: int)
    (
    3, 6
    )
    2nd

    View Slide

  22. Pure Function and Side Effect
    function sumWithSideEffect(x: int, y: int)
    (
    3, 6
    )
    2nd
    16

    View Slide

  23. Pure Function and Side Effect
    function sumWithSideEffect(x: int, y: int)
    (
    3, 6
    )
    2nd
    16

    View Slide

  24. Pure Function and Side Effect

    View Slide

  25. Pure Function and Side Effect
    ೣࣻ ղীࢲ ҙ੢ೞ૑ ঋח,


    ੹৉ ࢚క/߸ࣻ ഑਷ (౵ੌ, ചݶ) ੑ୹۱١ਸ ನೣೠ


    ৻ࠗ ࢚కী ৔ೱਸ ઴ ࣻ ੓Ҋ ੉ܳ ҙ଴ೞח ೯ਤܳ ನೣೞח ೣࣻܳ


    Side Effectۄ ೠ׮.

    View Slide

  26. Pure Function and Side Effect
    ೣࣻഋ ೐۽Ӓې߁ਸ ഝਊೞݶ


    ௏٘ܳ рѾೞѱ ੘ࢿೡ ࣻ ੓Ҋ ӝמ੄ ഛ੢੉ ए਋ݴ


    ࠁ׮ উ੹ೠ ௏٘ܳ ੘ࢿೡ ࣻ ੓׮

    View Slide

  27. Pure Function and Side Effect
    ࣽࣻೣࣻܳ ࢎਊೞݶ زੌೠ Ѿҗܳ ৘ஏೡ ࣻ ੓ਵ޲۽ (ଵઑ ైݺࢿ)


    ೣࣻ Ӓ ੗୓ܳ ݽٕചػ ӝמਵ۽ ࢎਊೡ ࣻ ੓׮.


    ژೠ ৻ࠗ о߸ ࢚కܳ ߸҃ೞ૑ ঋਵ޲۽


    زदࢿ ೐۽Ӓې߁ীࢲ ҕਬ ੗ਗ ߸҃ী ؀ೠ ҙबࢎܳ ઁೡ ࣻ ੓׮.


    ੉۠ ੉੼ਵ۽ ೣࣻഋ ೐۽Ӓې߁ীࢲח ࣽࣻ ೣࣻ੄ ࢎਊਸ ૑ೱೠ׮.

    View Slide

  28. Aspect of Functional Programming
    Ӓ۞ݶ ࣽࣻ ೣࣻ݅ਸ ࢎਊೞח Ѫ੉


    ೣࣻഋ ೐۽Ӓې߁ ߑधੌө?

    View Slide

  29. Aspect of Functional Programming
    Ӓۧӝח ೞա,


    Ӓېо૑Ҍ рױೠ ӝמ ೞաઑର


    ઁ؀۽ ٜ݅ ࣻ হ׮

    View Slide

  30. Aspect of Functional Programming
    ৻ࠗ ࣁ҅ܳ ߸҃ਸ दெঠ ೞա


    ߸҃ਸ दఃח ࠗ࠙ਸ ୭ࣗചೞҊ ҳ࠙(Ѻܻ)दః੗

    View Slide

  31. ߸زਸ ઴੉ݶࢲ উ੿ࢿ ֫੉ӝ
    ё୓/৻ࠗ ࢚క੄


    ߸ز੉ ੓ח ࠗ࠙਷


    ࠶۾ Scopeਵ۽


    Ѻܻೠ׮

    View Slide

  32. Ҋରೣࣻܳ ഝਊೠ ӝמ ഛ੢

    View Slide

  33. Ҋରೣࣻܳ ഝਊೠ ӝמ ഛ੢
    CSVо ইצ ׮ܲ ౵ੌ ഋध


    ഑਷ Plain Text۽ Append
    ೞח ӝמ੉ ୶оػ׮ݶ?

    View Slide

  34. Ҋରೣࣻܳ ഝਊೠ ӝמ ഛ੢
    ё୓ܳ Stringਵ۽ ੹ജೞח ۽૒ਸ
    ৻ࠗীࢲ ઱ੑदெ


    ҕా ۽૒ী ׮ഋࢿਸ ઁҕ

    View Slide

  35. ઺р ੼Ѩ
    ਸ ੉೧ೞҊ


    ࢎਊ೧ঠೡ ૑ ঌইঠ ೞݴ


    Ӓ ੉റী ޖ঺੉ ੓ח ૑ ౵ঈ೧ب ן૑ ঋ׮
    ݾ੸
    যڌѱ

    View Slide

  36. ઺р ੼Ѩ
    → উ੿ࢿ, ਬ૑ࠁࣻࢿ, оةࢿ ૐо


    → ࣽࣻೣࣻ ഝਊ, Side Effect Ѻܻ
    ݾ੸
    যڌѱ

    View Slide

  37. More, Functional Programming
    Ҋରೣࣻܳ ഝਊೞৈ ੤ࢎਊࢿਸ ՑযৢܻҊ


    ࠁ׮ ؊ উ੿੸ਵ۽ ೐۽Ӓې߁ਸ ೞҊ र׮ݶ?

    View Slide

  38. More, Functional Programming
    Ҋରೣࣻܳ ഝਊೞৈ ੤ࢎਊࢿਸ ՑযৢܻҊ


    ࠁ׮ ؊ উ੿੸ਵ۽ ೐۽Ӓې߁ਸ ೞҊ र׮ݶ?
    Ҋରೣࣻܳ ഝਊೞח ё୓(ё୓ ஶప੉ց)੄


    ౠࢿਸ ঌҊ, ੉ܳ ഝਊೞݶ ػ׮

    View Slide

  39. Category Theory
    Ҋରೣࣻܳ ഝਊೞৈ ࢜۽਍ ఋੑ/ӝמਸ ઁҕೞӝ ਤ೧ࢶ


    ੉ܳ ҳࢿೞח ఋੑী ؀೧ ঌইঠ ೠ׮.

    View Slide

  40. ೣࣻഋী ੸੺ೠ “ஶప੉ց"
    Monad

    View Slide

  41. ೣࣻഋী ੸੺ೠ “ஶప੉ց"
    Monadח ূبಔఠ ஠పҊܻ੄ ݽ֢੉٘
    Monad

    View Slide

  42. ೣࣻഋী ੸੺ೠ “ஶప੉ց"
    Monadח ূبಔఠ ஠పҊܻ੄ ݽ֢੉٘
    Monad

    View Slide

  43. Category Theory
    ߧ઱ۿ
    (
    Category Theory)ীࢲח ҳઑ୓
    (
    Object)৬


    ҳઑ୓ٜр੄ ҙ҅
    (
    Morphism, ࢎ࢚)ܳ ׮ܘ׮

    View Slide

  44. Functor
    ف ஠పҊܻ р੄ ೣࣻ੉Ҋ


    ҳઑ୓ח ҳઑ୓۽, ೣࣻח ೣࣻ۽ ؀਽दఃח ೣࣻ

    View Slide

  45. Functor
    ੉۞ݶ য٣ࢲ ݆੉ࠄ Ѫ э૑ ঋաਃ?

    View Slide

  46. Functor

    View Slide

  47. Functor੄ ઺୏ ޙઁ

    View Slide

  48. Monoid
    ਤ੄ ࢿ૕ਸ ݅઒ೞח ஠పҊܻ

    View Slide

  49. Monoid
    ਤ੄ ࢿ૕ਸ ݅઒ೞח ஠పҊܻ


    (ো࢑઺ যו ੌࠗ࠙ਸ ݢ੷ ࣻ೯ೞ؊ۄب ҡଳ׮ ੿ب੄ ੄޷)

    View Slide

  50. Monad

    View Slide

  51. Monad

    View Slide

  52. Monad
    ੉ ࢿ૕ਸ ഝਊೞৈ ઺୏ػ ఋੑਸ ߩӡ ࣻ ੓׮

    View Slide

  53. Monad
    flatMap ೣࣻܳ ࢤп೧ࠁ੗!

    View Slide

  54. Monad
    Nested Optional۽ оٙସ؍ ௏٘ب

    View Slide

  55. Monad

    View Slide

  56. Monad ਽ਊ: ৈ۞ ா੉झܳ ೠ ଃਵ۽

    View Slide

  57. Monad ਽ਊ: ৈ۞ ா੉झܳ ೠ ଃਵ۽
    ী۞ ߊࢤ द ী۞ ఋੑਸ Monad ఋੑਵ۽ ೠߣ ؊ хऱળ׮ݶ?

    View Slide

  58. Monadܳ ഝਊೠ ࢚క ୊ܻ੄ ੉੼
    Monad ղࠗ ࢚కܳ ইח Ѫҗ ࢚ҙহ੉


    ѐߊ੗о ۽૒ਸ ୓੉׬೧ب ޙઁо হب۾ ୊ܻ


    ೡ ࣻ ੓׮

    View Slide

  59. Monad is Everywhere
    Spring Reactor(Mono)

    View Slide

  60. Monad is Everywhere
    RxJava (Kotlin)

    View Slide

  61. Monad is Everywhere

    View Slide

  62. Monad is Everywhere
    Kotlin Result

    View Slide

  63. Monad is Everywhere
    Compose Modifier

    View Slide

  64. Thanks!
    @l2hyunwoo


    KotlinConf’23 Global in Songdo


    Mathpresso Inc. Android/React Native Developer
    Slido

    View Slide