Upload
-
View
136
Download
3
Embed Size (px)
Citation preview
「先端技術」 - 関数型プログラミング -
nakasen_20th
関数型プログラミング1. ひとことで言えば?
2. 生まれた背景
3. 概要
4. 周囲はどう見ているか - 好意的視点
5. 周囲はどう見ているか - 批判的視点
6. 今後はどうなる?
7. 星いくつ?
1. ひとことで言えば?
「関数の定義が数学に近いプログラミング手法」
2. 生まれた(見直された)背景
• 数式に近い記述の高級言語として(1958年)
• 近年のプロジェクト炎上多発(→再評価)
• JavaScriptの復権
3. 概要説明
• 数学の関数とプログラミング言語の関数
• 関数型プログラミング言語の特徴
• 関数型プログラミング言語の種類
• LISPの誕生→JavaScriptの復権→他言語へ影響
• プログラマにとっての試金石
数学の関数とプログラミング言語の関数
• 数学の関数
✴ 入力が同じであれば、出力も常に同じ値になるもの
• プログラミング言語の関数
✴ 関数内部の状態やシステム全体の状態によって 得られる出力が変わってしまう
• 「副作用がある」ということ
✴ 変数への代入や入出力によって状態が変化するということ
関数型プログラミング言語の特徴
• 基本的に副作用がない
• 関数がファーストクラスオブジェクト
• 静的型付け言語は型推論機能を持つ
• クロージャ、遅延評価、カリー化、部分適用等
• バグが減りソースコードがスッキリする
関数型プログラミング言語の特徴• 正の整数だけの合計値を求める関数(Javaの場合) int sum(int[] array) { int ret = 0; for (int i : array) { if (i > 0) { ret = ret + i; } } return ret;}
関数型プログラミング言語の特徴• 正の整数だけの合計値を求める関数(Haskellの場合) sum = f where f [] = 0 f (it : its) | it > 0 = it + f its | otherwise = f its
関数型プログラミング言語の種類
• 純粋関数型言語(副作用を許さない)
• 静的型付け
• Haskell
• Miranda
関数型プログラミング言語の種類• 非純粋関数型言語(副作用を許す)
• 静的型付け
• ML
• OCaml
• Scala
• 動的型付け
• Erlang
• LISP
• Scheme(LISPの方言)
LISPの誕生
• 2番めに古いプログラミング言語(1958年)
• S式とカッコの多さ
• 実装しやすく多くの方言
• マニア向け言語としての歴史
JavaScriptの復権
• Webブラウザに動的変化を与えるための言語として華々しくデビュー
• ブラウザ側の独自実装乱発で滅亡の危機
• 実は関数がファーストクラスオブジェクト!
• Googleエンジニアのハートを射抜く?→ Ajaxを利用したプロダクツのヒット
JavaScriptの復権
• JavaScriptは関数型プログラミングのとっかかりに最適(すぐ試せる)
• JavaScriptで関数型っぽく書いてみよう http://qiita.com/takeharu/items/cf98d352ff574c5ac536
• いい思いをしたプログラマがJavaScriptを滅亡の危機から救った
他言語への影響
• 既存言語でのプロジェクトで炎上頻発!
• 関数型いいんじゃね? ソースコードきれい!
• ラムダ式、クロージャーの導入 (Javaもついに)
• 型推論、遅延評価等の導入
• 最近はどの言語も関数型の機能を持っている
プログラマにとっての試金石
• 新しいパラダイムを一から勉強し直し?
• オブジェクト指向をやっと理解したのに・・・
• 設計は? フレームワークは? 運用は?
• 文献は英語ばっかり
プログラマにとっての試金石• 上からの圧力
✴ レガシーの面倒見るのはもうコリゴリ
✴ 今後新規プロジェクトはPHP禁止、ScalaはO.K.(某CA社?)
✴ Haskellプロジェクトで良い人材集めよう!
• 下からの突き上げ
✴ 若いプログラマが「新技術でやりましょう!」
4.周囲はどう見ているか(好意的視点)
• バグが減る!
• ソースコードがすっきりする!
• 並列処理が書きやすい!
• 学習コスト高過ぎ
• 業務処理は無理、マニアのためのもの
• プログラマの単価を上げるためのバズワード
5.周囲はどう見ているか(批判的視点)
6. 今後はどうなる?
• オブジェクト指向との親和性アップ
• 「はじめての言語が関数型」世代の出現(関数型ネイティブ)
• 大手デベロッパのScalaプロジェクト増加
7. 星いくつ?
• トンガリ度 ★☆☆☆☆
• 絶対流行る ★★★★★
• お金の匂い ★★★★☆
• 敷居の低さ ★★★★☆
• 総合おススメ度 ★★★★★