*関数型プログラミングってなんだと思ったので自分なりに調べてメモしておきます。(個人的に調べてまとめたものなので間違いがあるかも。かなりざっくりしてます)
関数型プログラミング
- 宣言型プログラミングの一種で「問題の性質を記述する」ことでプログラミングすること
- 「まるで要件仕様を述べるようにロジックが流れていく」。入力と出力を関数によって記述し目的の値を求めるアプローチ
- 永続データプログラミング(破壊できない、再代入できない)とも言う。永続データを駆使して行うプログラミング
宣言型プログラミングの例
- SQLクエリ
SELECT * FROM userTable WHERE user_id = 1
上記のSQLクエリがuserTableからuser_id=1のものを探してきて!ということを意味しています。ただ「どのような手順で探すか」「どのように求めるか」などの情報は一切自分では書いていません。全てSQLクエリに任せています。
命令型プログラミング
- メソッドによるデータ構造の変更や副作用を伴い「まるで小説のような」ロジック
- 再代入により破壊できるデータ(for文の変数iなどが典型例)
- 個人的に真っ先に思いつく言語はJava
命令形プログラミングの例
- 宣言型プログラミングのSQLクエリの命令形プログラミングVer
こんな感じですかね。(すみません。ものすっごくテキトウに書きました)変数iを代入しているところが命令形プログラミングの部分ですかね。
for(int i=0;i < userTable.lenght;i++){ if(userTable[i].user_id==1){ sysout(userTable[i].user_id); } }
疑問
僕は1年くらいJavaをやってきた人間で、それ以外の言語はあんまり触ったことがありません。なので代入なしでどうやってfor文とかを実現するの?と真っ先に思いました。このあたりはこれから関数型プログラミングを勉強するしかありませんね。