関数型もどきプログラミング

関数型ではないけど関数型に見えるプログラミング

関数型ではないけれど、関数型っぽく書けるJavaScriptのコードを、備忘録としてここに書きます。

注意点
  1. 関数型ではありません
  2. 参照透過性も考慮されていません
  3. オブジェクト指向かどうかの保証はしません

サンプル

配列にそれぞれ1を足すコードです。

function map(list) {
  return f;
  function f (func) {
    if (!func) {
      return list;
    } 
    for (var i=0;i

list = list.concat([])を追加すると、副作用が少なくなり、多少はまともになるかもしれません。
また、上のコードが何をやっているのか分りやすくするため、数字を足していくだけのコードも書いておきました。

 function add(num) {
   return f;
   function f (n) {
     if (!n && (n !== 0)) {
       return num;
     }
     num += n;
     return f;
   };
 };

add( 2 )( 3 )();                   // 5
add( 2 )( 3 )( 12 )( 101 )(); // 118

結論

  1. 関数型じゃないけど、いろいろと遊べるよ
  2. 実際には、関数の裏にクロージャとしてオブジェクトが隠蔽されているだけ
  3. とりあえず、関数型やオブジェクト指向と区別するために、「関数型もどきプログラミング」と名づけておきます