2013/08/31に発表した資料 https://github.com/parrot-studio/webcafe4-side-effect
希望の関数と絶望の副作用希望の関数と絶望の副作用(非)⽇常編ぱろっと(@parrot-studio)2013/08/31
View Slide
希望の関数と絶望の副作用Profileぱろっと(T.Tachiki)@parrot̲studioparrot-studio.comプログラマっぽい何か(⽐較的)⾔語マニア
希望の関数と絶望の副作用今⽇のテーマ
希望の関数と絶望の副作用副作用
希望の関数と絶望の副作用you�may�say..."また関数型ですか?(´-ω-)"
希望の関数と絶望の副作用だが待ってほしい
希望の関数と絶望の副作用ScalaとかHaskellの話はしない
希望の関数と絶望の副作用この辺も今⽇はどうでもいい参照透明性遅延評価モナドetc…
希望の関数と絶望の副作用副作用って?ある機能がコンピュータの(論理的な)状態を変化させ、それ以 降で得ら れ る結 果に影 響を与えることをいう。代 表 的な例は変 数へ の値の代⼊である。[「副作用�(プログラム)�-�Wikipedia」より引用]
希望の関数と絶望の副作用副作用が「ある」とは?何かをした結果、状態が変化する同じ値を渡しても、同じ結果とは限らない「破壊的である」
希望の関数と絶望の副作用副作用が「ある」例�������������������������������������������������������������������������������������������������������
希望の関数と絶望の副作用副作用が「ない」とは?何かをしても、状態が変化しないある値を渡せば、必ず対応する値が返る「非破壊的である」
希望の関数と絶望の副作用副作用が「ない」例�������������������������������������������������������������������������������������������������������������������������������
希望の関数と絶望の副作用余談Rubyではメソッド名で区別できる「場合もある」���������������������������������������������������������������������������������������������������������������������������������������������
希望の関数と絶望の副作用⼀般的にI/Oが絡むものは副作用がある�������������������������������������������������������������������������������������������
希望の関数と絶望の副作用あまりコードに興味がない?
希望の関数と絶望の副作用ならば
希望の関数と絶望の副作用「テスト」という観点で考える
希望の関数と絶望の副作用"副作用がないもの"のテスト⼊⼒を与えて出⼒をみるだけ場合によってはコードを⾒るだけでバグの有無がわかる結合テストもすぐできる遊ぶ時間が作れる精神的に安定
希望の関数と絶望の副作用簡単(`・ω・´)
希望の関数と絶望の副作用"副作用があるもの"のテストまず環境を揃える次に⼊⼒を与えて出⼒をみる例外が発⽣した場合の動作とかもチェックする結合すると問題が出やすい遊ぶ時間が削られる精神的に追い込まれる
希望の関数と絶望の副作用めんどい(´-ω-)
希望の関数と絶望の副作用"副作用のない世界"「理想的関数型プログラミングの世界」=「全く副作用がない」
希望の関数と絶望の副作用but
希望の関数と絶望の副作用"現実"に"I/Oのないシステム"は存在しない
希望の関数と絶望の副作用副作用を局所的に押さえ込む
希望の関数と絶望の副作用あまり良くない例read処理writeread処理write...
希望の関数と絶望の副作用⽐較的良い例⼀括read副作用のない処理1副作用のない処理2副作用のない処理3...⼀括writeそもそも、⼀括にしないとトランザクションの問題も(´-ω-)
希望の関数と絶望の副作用他にも、テストできるように引数を考えるとか�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
希望の関数と絶望の副作用"副作用のないシステム"大きな系として「外」から⾒たときに「⼊⼒に対して出⼒が⼀定」というのも大事(APIやライブラリ等)
希望の関数と絶望の副作用"副作用のないシステム"並列処理では特に重要Webシステムもリクエストを並列で処理しているのをお忘れなく(`・ω・´)
希望の関数と絶望の副作用繰り返しますが
希望の関数と絶望の副作用大事なこと関数型⾔語を知らなくても、関数型の考え⽅を知っていると"堅牢なシステム"を作りやすい
希望の関数と絶望の副作用まずは「副作用があるか?」を意識してみてはどうでしょう(´・ω・)?
希望の関数と絶望の副作用ありがとうございました(´・ω・)っ旦~
希望の関数と絶望の副作用おまけ「代⼊」を⼀度も使わないBrainf**kインタプリタ�by�Scalahttp://parrot.hatenadiary.jp/entry/2013/08/06/121645
希望の関数と絶望の副作用参考までに・・・Q.�「ダンガンロンパ 希望の学園と絶望の⾼校⽣」とは?A.�限りなく絶望的な状況から希望を勝ち取る物語です(`・ω・´)http://www.danganronpa.com/