関数型を盲信するその前に

16
関数型を盲信するその前に @hajikami 13/Dec./2014 1Scala関西勉強会

Upload: hajikami

Post on 18-Jul-2015

92 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 関数型を盲信するその前に

関数型を盲信するその前に

@hajikami

13/Dec./2014

第1回 Scala関西勉強会

Page 2: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

2自己紹介● @hajikami

● 業務系システムの人– ここ一年、ろくにプログラムを書いていない

● 英語をぼちぼち– TOEIC は 750 点ぐらいで安定中– 今は Pokémon をプレイしています。英語で

● 最新作は、日本で普通に買ったら、英語でも選べるよ!

Page 3: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

3目次1.はじめに

2.言いたいことの5割ぐらいを書いたスライド

3.オブジェクト的 と 手続き的 と 関数的

4.学習コスト と その他ごちゃごちゃ

5.関数型のメリット

6.もっかい、学習コスト

7.まとめ

Page 4: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

4はじめに● このLTは、色々と聞きかじったことを基に、

自分なりのエッセンスを加えてまとめたものです● 例外を全力で無視しています

● 半分ぐらいネタです/半分ぐらい本気です

Page 5: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

5言いたいことの5割ぐらい

オブジェクト的 S.V(...) [→ Target]

手続き的V(...) [→ Target]How

関数的 What

Page 6: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

6オブジェクト的 と 手続き的● オブジェクト的 … 行為者に着目

● 『オブジェクト』さんが、『メソッド』をする● 『オブジェクト』さんの『メンバ変数』

● 結果、書くときにはこうなることが多い● 主語.動詞(目的語など)

– He has a pen … 英語の語順と一緒

● 属格.名詞– これも、英語の My father という語順と一緒

Page 7: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

7オブジェクト的 と 手続き的● 手続き的 … 行為に着目

● 『プロシージャ』をする– あえて主語を書くなれば、

『コンピュータ』が『プロシージャ』をする

● 結果、書くときにはこうなることが多い● 動詞(目的語など)

– has a pen … 主語を省略した英語の語順と一緒

Page 8: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

8手続き的 と 関数的● 手続き的 … How

● どのようにするか– 役員の一覧がほしいから、

ループを回して、条件に当てはまるものを抜き出して…

● オブジェクト的な考え方: V の手段には興味が無い● S が V さえしてくれれば、 V の中身はどうでもいい

Page 9: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

9手続き的 と 関数的● 関数的 … What

● 何を手に入れるか– 役員の一覧

● とよく言われているけど、プログラマとしてはぶっちゃけ How で考えていることもあるよね● リストを渡して、

再帰を使って別のリストを返すような処理とか● 「何を手に入れるか」を、「どのように」組み合わせるか

ってプログラミングスタイルともいえる

Page 10: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

10学習コスト● 前提が大きく変わるものを学ぶのは大変

● 関数型と手続き型って、かなり違う– 手続き的なプログラミングで覚えてきたパターンは、

関数的なプログラミングでは使えないことが多い

● 最後は、学習コストと得られるものとの兼ね合い● 趣味であれば、惜しみなくコストを使えるけどね…

Page 11: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

11その他ごちゃごちゃ● 関数型…と言われると、以下が混ざってくる

● 状態を持たない– って言うけど、再帰とか組んでる時には「途中の状態」を想像するよね– 状態が持てる Scala って言語はどうなるんですか!

● What を書いているから読みやすい– コレクションAPIのおかげではあるけれども、頭のシフトが出来れば、このメリットはかなり大きい

– 手続き型でも、手続きの分割と名付けで、ある程度は回避できるか…?● 副作用がない

– 手続き型でも、副作用のないプログラム書けるよね● 遅延評価

– これは関数型そのものとは直接関係ないよね

Page 12: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

12関数型のメリット● What を書いているから読みやすい(再掲)

● だらだらと長く書くことが、しにくい● 長く書こうとするほうが大変● 1関数に2つ以上の機能…ということがない● 短い、つまり、読んでる間に覚えておくことが少ない

● 人間がやってしまいがちなアンチパターンをシステム的に防いでしまえるのは、大きな利点

Page 13: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

13もっかい、学習コスト● インプットって実はめちゃくちゃ大切

● インプットのないアウトプットは『ゴミ』● 一定量の良質なインプットを保ちつつ、少しのアウトプットを直してもらうことで、成長する

● ってことは、やっぱり学習コスト高い● とはいえ、プログラミング言語は、多くの場合、

自然言語のサブセットなので、自然言語よりはマシ● 変化のスピードは7倍(dog year)かもしれないけど…

Page 14: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

14文法事項が近いということ● 言語がパラダイム的に遠くても、文法事項が近しければ、

覚えているパターンを使いまわせる● 諸外国語の「~したい」って、けっこう似てるよ

– I want to do.– Je veux faire.

– .אני רוצה לעשות– 我想做。

● 逆にいうと、似てない文法事項は覚えているパターンを使いまわせない

– てかこれ、日本語が違いすぎるんじゃー!! (ノ#`皿´)ノ┻┻;:'、・゙;

Page 15: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

15まとめ● プログラミングにはいろいろなパラダイムがある

● 関数型もその一つ

● 関数型言語を使うことが最善というわけではない● 移行するための学習コストが高い● 気をつけながらプログラムを書いていれば、

関数型でよく言われるメリットは手続き型でもそこそこ享受できる

● 関数型言語そのものを使うのもいいけど、関数型を学ぶことで得た知識を使っていくことも大切

Page 16: 関数型を盲信するその前に

13/Dec./2014 関数型を盲信するその前に @hajikami

16以上

ありがとうございました

…いいのか、この結論でorz