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

Contenu connexe

En vedette

なれる!SE 読んでみた
なれる!SE 読んでみたなれる!SE 読んでみた
なれる!SE 読んでみた
Takafumi Yoshida
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
maruyama097
 
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

En vedette (20)

なれる!SE 読んでみた
なれる!SE 読んでみたなれる!SE 読んでみた
なれる!SE 読んでみた
 
ぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよ
 
Java女子部 will take over the world (野望)
Java女子部 will take over the world (野望)Java女子部 will take over the world (野望)
Java女子部 will take over the world (野望)
 
Java女子部よこな自己紹介
Java女子部よこな自己紹介Java女子部よこな自己紹介
Java女子部よこな自己紹介
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
 
Fast and Probvably Seedings for k-Means
Fast and Probvably Seedings for k-MeansFast and Probvably Seedings for k-Means
Fast and Probvably Seedings for k-Means
 
Pythonで機械学習入門以前
Pythonで機械学習入門以前Pythonで機械学習入門以前
Pythonで機械学習入門以前
 
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向
 
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
 
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
 
文章を読み、理解する機能の獲得に向けて-Machine Comprehensionの研究動向-
文章を読み、理解する機能の獲得に向けて-Machine Comprehensionの研究動向-文章を読み、理解する機能の獲得に向けて-Machine Comprehensionの研究動向-
文章を読み、理解する機能の獲得に向けて-Machine Comprehensionの研究動向-
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
 
Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン
Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオンTech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン
Tech-Circle #18 Pythonではじめる強化学習 OpenAI Gym 体験ハンズオン
 
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
オブジェクト指向設計の原則
オブジェクト指向設計の原則オブジェクト指向設計の原則
オブジェクト指向設計の原則
 

Plus de parrotstudio

Plus de parrotstudio (10)

エンジニアがTRPGをやるべき理由 〜隣り合わせの遊びと技術〜 (Gunma.web #12 2013/02/09)
エンジニアがTRPGをやるべき理由 〜隣り合わせの遊びと技術〜  (Gunma.web #12 2013/02/09)  エンジニアがTRPGをやるべき理由 〜隣り合わせの遊びと技術〜  (Gunma.web #12 2013/02/09)
エンジニアがTRPGをやるべき理由 〜隣り合わせの遊びと技術〜 (Gunma.web #12 2013/02/09)
 
(´・ω・`)としたーは衰退しました (Gunma.web #11 2012/11/23)
(´・ω・`)としたーは衰退しました  (Gunma.web #11 2012/11/23) (´・ω・`)としたーは衰退しました  (Gunma.web #11 2012/11/23)
(´・ω・`)としたーは衰退しました (Gunma.web #11 2012/11/23)
 
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08) 私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
 
Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03) Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
 
思い通りにいかないのがWebなんて 割り切りたくないから (Gunma.web #4 2011/02/12)
思い通りにいかないのがWebなんて 割り切りたくないから (Gunma.web #4 2011/02/12)思い通りにいかないのがWebなんて 割り切りたくないから (Gunma.web #4 2011/02/12)
思い通りにいかないのがWebなんて 割り切りたくないから (Gunma.web #4 2011/02/12)
 
俺の体がこんなにすっきりしているわけがない ~5分でわかる催眠プログラミング~ (Gunma.web #3 2010/12/11)
俺の体がこんなにすっきりしているわけがない ~5分でわかる催眠プログラミング~ (Gunma.web #3 2010/12/11) 俺の体がこんなにすっきりしているわけがない ~5分でわかる催眠プログラミング~ (Gunma.web #3 2010/12/11)
俺の体がこんなにすっきりしているわけがない ~5分でわかる催眠プログラミング~ (Gunma.web #3 2010/12/11)
 
「一番いいおすすめを頼む」 ~5分でわかるレコメンドエンジンの基礎~ (Gunma.web #3 2010/12/11)
「一番いいおすすめを頼む」 ~5分でわかるレコメンドエンジンの基礎~ (Gunma.web #3 2010/12/11)「一番いいおすすめを頼む」 ~5分でわかるレコメンドエンジンの基礎~ (Gunma.web #3 2010/12/11)
「一番いいおすすめを頼む」 ~5分でわかるレコメンドエンジンの基礎~ (Gunma.web #3 2010/12/11)
 
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
 
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
 

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