$30 off During Our Annual Pro Sale. View Details »

希望の関数と絶望の副作用

 希望の関数と絶望の副作用

More Decks by ぱろっと(parrot-studio)

Other Decks in Technology

Transcript

  1. 希望の関数と絶望の副作用
    希望の関数と
    絶望の副作用
    (非)⽇常編
    ぱろっと(@parrot-studio)
    2013/08/31

    View Slide

  2. 希望の関数と絶望の副作用
    Profile
    ぱろっと(T.Tachiki)
    @parrot̲studio
    parrot-studio.com
    プログラマっぽい何か
    (⽐較的)⾔語マニア

    View Slide

  3. 希望の関数と絶望の副作用
    今⽇の
    テーマ

    View Slide

  4. 希望の関数と絶望の副作用



    View Slide

  5. 希望の関数と絶望の副作用
    you�may�say...
    "また関数型です
    か?(´-ω-)"

    View Slide

  6. 希望の関数と絶望の副作用
    だが待っ
    てほしい

    View Slide

  7. 希望の関数と絶望の副作用
    Scalaとか
    Haskellの
    話はしない

    View Slide

  8. 希望の関数と絶望の副作用
    この辺も今⽇はどうでもいい
    参照透明性
    遅延評価
    モナド
    etc…

    View Slide

  9. 希望の関数と絶望の副作用
    副作用って?
    ある機能がコンピュータの(論
    理的な)状態を変化させ、それ
    以 降で得ら れ る結 果に影 響を
    与えることをいう。
    代 表 的な例は変 数へ の値の代
    ⼊である。
    [「副作用�(プログラム)�-�Wikipedia」より引用]

    View Slide

  10. 希望の関数と絶望の副作用
    副作用が「ある」とは?
    何かをした結果、状態が変化す

    同じ値を渡しても、同じ結果と
    は限らない
    「破壊的である」

    View Slide

  11. 希望の関数と絶望の副作用
    副作用が「ある」例
    ����������
    ���������������������
    ��������
    ���
    ����������
    �������������
    �������������
    �����������
    ��������������

    View Slide

  12. 希望の関数と絶望の副作用
    副作用が「ない」とは?
    何かをしても、状態が変化しな

    ある値を渡せば、必ず対応する
    値が返る
    「非破壊的である」

    View Slide

  13. 希望の関数と絶望の副作用
    副作用が「ない」例
    ���������������������
    �����������
    ���
    ��������������������
    ��������������������
    ��������������������
    ��������������������������������

    View Slide

  14. 希望の関数と絶望の副作用
    余談
    Rubyではメソッド名で区別できる
    「場合もある」
    ����������
    ����������������������������������
    ��������������������������������
    �����������������������������������
    ������������������������������

    View Slide

  15. 希望の関数と絶望の副作用
    ⼀般的にI/Oが絡むものは副
    作用がある
    ��������������������
    �������������������������
    ���������������������
    �������������������������

    View Slide

  16. 希望の関数と絶望の副作用
    あまりコー
    ドに興味が
    ない?

    View Slide

  17. 希望の関数と絶望の副作用



    View Slide

  18. 希望の関数と絶望の副作用
    「テスト」
    という観点
    で考える

    View Slide

  19. 希望の関数と絶望の副作用
    "副作用がないもの"のテスト
    ⼊⼒を与えて出⼒をみるだけ
    場合によってはコードを⾒るだ
    けでバグの有無がわかる
    結合テストもすぐできる
    遊ぶ時間が作れる
    精神的に安定

    View Slide

  20. 希望の関数と絶望の副作用
    簡単
    (`・ω・´)

    View Slide

  21. 希望の関数と絶望の副作用
    "副作用があるもの"のテスト
    まず環境を揃える
    次に⼊⼒を与えて出⼒をみる
    例外が発⽣した場合の動作とか
    もチェックする
    結合すると問題が出やすい
    遊ぶ時間が削られる
    精神的に追い込まれる

    View Slide

  22. 希望の関数と絶望の副作用
    めんどい
    (´-ω-)

    View Slide

  23. 希望の関数と絶望の副作用
    "副作用のない世界"
    「理想的関数型
    プログラミングの世界」

    「全く副作用がない」

    View Slide

  24. 希望の関数と絶望の副作用
    but

    View Slide

  25. 希望の関数と絶望の副作用
    "現実"に
    "I/Oのない
    システム"は
    存在しない

    View Slide

  26. 希望の関数と絶望の副作用



    View Slide

  27. 希望の関数と絶望の副作用
    副作用を
    局所的に
    押さえ込む

    View Slide

  28. 希望の関数と絶望の副作用
    あまり良くない例
    read
    処理
    write
    read
    処理
    write
    ...

    View Slide

  29. 希望の関数と絶望の副作用
    ⽐較的良い例
    ⼀括read
    副作用のない処理1
    副作用のない処理2
    副作用のない処理3
    ...
    ⼀括write
    そもそも、⼀括にしないとトランザクションの問題も(´-ω-)

    View Slide

  30. 希望の関数と絶望の副作用
    他にも、テストできるように
    引数を考えるとか
    ��������������
    ������������������
    �������������������������������������
    ���
    ����������������������
    ������������������������������
    �������������������
    ���������������������������������
    ���

    View Slide

  31. 希望の関数と絶望の副作用
    "副作用のないシステム"
    大きな系として
    「外」から⾒たときに
    「⼊⼒に対して出⼒が⼀
    定」というのも大事
    (APIやライブラリ等)

    View Slide

  32. 希望の関数と絶望の副作用
    "副作用のないシステム"
    並列処理では特に重要
    Webシステムもリクエストを
    並列で処理しているのを
    お忘れなく(`・ω・´)

    View Slide

  33. 希望の関数と絶望の副作用
    繰り返し
    ますが

    View Slide

  34. 希望の関数と絶望の副作用
    大事なこと
    関数型⾔語を知らなくても、
    関数型の考え⽅を知っていると
    "堅牢なシステム"を作りやすい

    View Slide

  35. 希望の関数と絶望の副作用
    まずは「副作用
    があるか?」を
    意識してみては
    どうでしょう
    (´・ω・)?

    View Slide

  36. 希望の関数と絶望の副作用
    ありがとうご
    ざいました
    (´・ω・)っ旦~

    View Slide

  37. 希望の関数と絶望の副作用
    おまけ
    「代⼊」を⼀度も使わない
    Brainf**kインタプリタ�by�Scala
    http://parrot.hatenadiary.jp/
    entry/2013/08/06/121645

    View Slide

  38. 希望の関数と絶望の副作用
    参考までに・・・
    Q.�「ダンガンロンパ 希望の学園
    と絶望の⾼校⽣」とは?
    A.�限りなく絶望的な状況から希望
    を勝ち取る物語です(`・ω・´)
    http://www.danganronpa.com/

    View Slide