SlideShare a Scribd company logo
1 of 16
Download to read offline
関数型を盲信するその前に
@hajikami
13/Dec./2014
第1回 Scala関西勉強会
13/Dec./2014 関数型を盲信するその前に @hajikami
2
自己紹介
● @hajikami
● 業務系システムの人
– ここ一年、ろくにプログラムを書いていない
● 英語をぼちぼち
– TOEIC は 750 点ぐらいで安定中
– 今は Pokémon をプレイしています。英語で
● 最新作は、日本で普通に買ったら、英語でも選べるよ!
13/Dec./2014 関数型を盲信するその前に @hajikami
3
目次
1.はじめに
2.言いたいことの5割ぐらいを書いたスライド
3.オブジェクト的 と 手続き的 と 関数的
4.学習コスト と その他ごちゃごちゃ
5.関数型のメリット
6.もっかい、学習コスト
7.まとめ
13/Dec./2014 関数型を盲信するその前に @hajikami
4
はじめに
● このLTは、色々と聞きかじったことを基に、
自分なりのエッセンスを加えてまとめたものです
● 例外を全力で無視しています
●
半分ぐらいネタです/半分ぐらい本気です
13/Dec./2014 関数型を盲信するその前に @hajikami
5
言いたいことの5割ぐらい
オブジェクト的 S.V(...) [→ Target]
手続き的
V(...) [→ Target]
How
関数的 What
13/Dec./2014 関数型を盲信するその前に @hajikami
6
オブジェクト的 と 手続き的
● オブジェクト的 … 行為者に着目
● 『オブジェクト』さんが、『メソッド』をする
● 『オブジェクト』さんの『メンバ変数』
● 結果、書くときにはこうなることが多い
●
主語.動詞(目的語など)
– He has a pen … 英語の語順と一緒
●
属格.名詞
– これも、英語の My father という語順と一緒
13/Dec./2014 関数型を盲信するその前に @hajikami
7
オブジェクト的 と 手続き的
● 手続き的 … 行為に着目
● 『プロシージャ』をする
– あえて主語を書くなれば、
『コンピュータ』が『プロシージャ』をする
● 結果、書くときにはこうなることが多い
●
動詞(目的語など)
– has a pen … 主語を省略した英語の語順と一緒
13/Dec./2014 関数型を盲信するその前に @hajikami
8
手続き的 と 関数的
● 手続き的 … How
● どのようにするか
– 役員の一覧がほしいから、
ループを回して、条件に当てはまるものを抜き出して…
● オブジェクト的な考え方: V の手段には興味が無
い
● S が V さえしてくれれば、 V の中身はどうでもいい
13/Dec./2014 関数型を盲信するその前に @hajikami
9
手続き的 と 関数的
● 関数的 … What
● 何を手に入れるか
– 役員の一覧
● とよく言われているけど、プログラマとしては
ぶっちゃけ How で考えていることもあるよね
● リストを渡して、
再帰を使って別のリストを返すような処理とか
● 「何を手に入れるか」を、「どのように」組み合わせるか
ってプログラミングスタイルともいえる
13/Dec./2014 関数型を盲信するその前に @hajikami
10
学習コスト
● 前提が大きく変わるものを学ぶのは大変
● 関数型と手続き型って、かなり違う
– 手続き的なプログラミングで覚えてきたパターンは、
関数的なプログラミングでは使えないことが多い
● 最後は、学習コストと得られるものとの兼ね合い
● 趣味であれば、惜しみなくコストを使えるけどね…
13/Dec./2014 関数型を盲信するその前に @hajikami
11
その他ごちゃごちゃ
● 関数型…と言われると、以下が混ざってくる
● 状態を持たない
– って言うけど、再帰とか組んでる時には「途中の状態」を想像するよね
– 状態が持てる Scala って言語はどうなるんですか!
● What を書いているから読みやすい
– コレクションAPIのおかげではあるけれども、
頭のシフトが出来れば、このメリットはかなり大きい
– 手続き型でも、手続きの分割と名付けで、ある程度は回避できるか…?
● 副作用がない
– 手続き型でも、副作用のないプログラム書けるよね
● 遅延評価
– これは関数型そのものとは直接関係ないよね
13/Dec./2014 関数型を盲信するその前に @hajikami
12
関数型のメリット
● What を書いているから読みやすい(再掲)
● だらだらと長く書くことが、しにくい
● 長く書こうとするほうが大変
● 1関数に2つ以上の機能…ということがない
● 短い、つまり、読んでる間に覚えておくことが少ない
● 人間がやってしまいがちなアンチパターンを
システム的に防いでしまえるのは、大きな利点
13/Dec./2014 関数型を盲信するその前に @hajikami
13
もっかい、学習コスト
● インプットって実はめちゃくちゃ大切
● インプットのないアウトプットは『ゴミ』
● 一定量の良質なインプットを保ちつつ、
少しのアウトプットを直してもらうことで、成長する
● ってことは、やっぱり学習コスト高い
● とはいえ、プログラミング言語は、多くの場合、
自然言語のサブセットなので、自然言語よりはマシ
● 変化のスピードは7倍(dog year)かもしれないけど…
13/Dec./2014 関数型を盲信するその前に @hajikami
14
文法事項が近いということ
● 言語がパラダイム的に遠くても、文法事項が近しければ、
覚えているパターンを使いまわせる
● 諸外国語の「~したい」って、けっこう似てるよ
– I want to do.
– Je veux faire.
– ‫לעשות‬ ‫רוצה‬ ‫אני‬.
– 我想做。
● 逆にいうと、似てない文法事項は覚えているパターンを使いま
わせない
– てかこれ、日本語が違いすぎるんじゃー!! (ノ#`皿´)ノ┻┻;:'、・゙;
13/Dec./2014 関数型を盲信するその前に @hajikami
15
まとめ
● プログラミングにはいろいろなパラダイムがある
● 関数型もその一つ
● 関数型言語を使うことが最善というわけではない
● 移行するための学習コストが高い
● 気をつけながらプログラムを書いていれば、
関数型でよく言われるメリットは
手続き型でもそこそこ享受できる
● 関数型言語そのものを使うのもいいけど、
関数型を学ぶことで得た知識を使っていくことも大切
13/Dec./2014 関数型を盲信するその前に @hajikami
16
以上
ありがとうございました
…いいのか、この結論でorz

More Related Content

Viewers also liked

さっぽろ保育園マップ これからどうしよう?
さっぽろ保育園マップ これからどうしよう?さっぽろ保育園マップ これからどうしよう?
さっぽろ保育園マップ これからどうしよう?Mayumit
 
はじめての生成文法 《後編》
はじめての生成文法 《後編》はじめての生成文法 《後編》
はじめての生成文法 《後編》Shuyo Nakatani
 
Pull Request & TDD 入門
Pull Request & TDD 入門Pull Request & TDD 入門
Pull Request & TDD 入門ESM SEC
 
文脈自由文法の話
文脈自由文法の話文脈自由文法の話
文脈自由文法の話kogecoo
 
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)Shirou Maruyama
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術Shinnosuke Takamichi
 
深層学習時代の自然言語処理
深層学習時代の自然言語処理深層学習時代の自然言語処理
深層学習時代の自然言語処理Yuya Unno
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力Yoshitaka Kawashima
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版MOCKS | Yuta Morishige
 

Viewers also liked (9)

さっぽろ保育園マップ これからどうしよう?
さっぽろ保育園マップ これからどうしよう?さっぽろ保育園マップ これからどうしよう?
さっぽろ保育園マップ これからどうしよう?
 
はじめての生成文法 《後編》
はじめての生成文法 《後編》はじめての生成文法 《後編》
はじめての生成文法 《後編》
 
Pull Request & TDD 入門
Pull Request & TDD 入門Pull Request & TDD 入門
Pull Request & TDD 入門
 
文脈自由文法の話
文脈自由文法の話文脈自由文法の話
文脈自由文法の話
 
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
 
研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術研究発表のためのプレゼンテーション技術
研究発表のためのプレゼンテーション技術
 
深層学習時代の自然言語処理
深層学習時代の自然言語処理深層学習時代の自然言語処理
深層学習時代の自然言語処理
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 

More from hajikami

これまでの日本語の話をしよう
これまでの日本語の話をしようこれまでの日本語の話をしよう
これまでの日本語の話をしようhajikami
 
ふつうの人こそ、ちょっと発表してみたらいいと思う
ふつうの人こそ、ちょっと発表してみたらいいと思うふつうの人こそ、ちょっと発表してみたらいいと思う
ふつうの人こそ、ちょっと発表してみたらいいと思うhajikami
 
サラリーマンプログラマと2つ目の武器
サラリーマンプログラマと2つ目の武器サラリーマンプログラマと2つ目の武器
サラリーマンプログラマと2つ目の武器hajikami
 
言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみた
言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみた言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみた
言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみたhajikami
 
How To Enjoy Lang-8
How To Enjoy Lang-8How To Enjoy Lang-8
How To Enjoy Lang-8hajikami
 
言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)
言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)
言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)hajikami
 
インデックスのおはなし
インデックスのおはなしインデックスのおはなし
インデックスのおはなしhajikami
 
Nom de fonction français
Nom de fonction françaisNom de fonction français
Nom de fonction françaishajikami
 
わかるようにする
わかるようにするわかるようにする
わかるようにするhajikami
 
PHP5技術者認定初級試験を受験しました
PHP5技術者認定初級試験を受験しましたPHP5技術者認定初級試験を受験しました
PHP5技術者認定初級試験を受験しましたhajikami
 
プレゼンの方法(ただし5分に限る) web公開版
プレゼンの方法(ただし5分に限る) web公開版プレゼンの方法(ただし5分に限る) web公開版
プレゼンの方法(ただし5分に限る) web公開版hajikami
 
魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)hajikami
 
5分でわかるPHPのクロージャ(web公開版)
5分でわかるPHPのクロージャ(web公開版)5分でわかるPHPのクロージャ(web公開版)
5分でわかるPHPのクロージャ(web公開版)hajikami
 

More from hajikami (13)

これまでの日本語の話をしよう
これまでの日本語の話をしようこれまでの日本語の話をしよう
これまでの日本語の話をしよう
 
ふつうの人こそ、ちょっと発表してみたらいいと思う
ふつうの人こそ、ちょっと発表してみたらいいと思うふつうの人こそ、ちょっと発表してみたらいいと思う
ふつうの人こそ、ちょっと発表してみたらいいと思う
 
サラリーマンプログラマと2つ目の武器
サラリーマンプログラマと2つ目の武器サラリーマンプログラマと2つ目の武器
サラリーマンプログラマと2つ目の武器
 
言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみた
言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみた言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみた
言語交換SNS Lang-8 で8ヶ月間外国語を書き続けてみた
 
How To Enjoy Lang-8
How To Enjoy Lang-8How To Enjoy Lang-8
How To Enjoy Lang-8
 
言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)
言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)
言語交換SNS Lang-8 で4ヶ月間英語を書き続けてみた(Web公開版)
 
インデックスのおはなし
インデックスのおはなしインデックスのおはなし
インデックスのおはなし
 
Nom de fonction français
Nom de fonction françaisNom de fonction français
Nom de fonction français
 
わかるようにする
わかるようにするわかるようにする
わかるようにする
 
PHP5技術者認定初級試験を受験しました
PHP5技術者認定初級試験を受験しましたPHP5技術者認定初級試験を受験しました
PHP5技術者認定初級試験を受験しました
 
プレゼンの方法(ただし5分に限る) web公開版
プレゼンの方法(ただし5分に限る) web公開版プレゼンの方法(ただし5分に限る) web公開版
プレゼンの方法(ただし5分に限る) web公開版
 
魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)魔法を使わないプログラミング(web公開版)
魔法を使わないプログラミング(web公開版)
 
5分でわかるPHPのクロージャ(web公開版)
5分でわかるPHPのクロージャ(web公開版)5分でわかるPHPのクロージャ(web公開版)
5分でわかるPHPのクロージャ(web公開版)
 

Recently uploaded

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (9)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

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