BLOGブログ
関数プログラミングに学ぶ良いコード
最近、関数プログラミングが流行ってきましたよね。
この良さを説明するのは、とても難しく感じています。
ですが、みなさんの馴染みが深い javascript のちょっとしたコード例で、良さの一部を紹介したいと思います。
問題:
「0から9までを全て加算せよ」
この問題を js のコードで書く、きっと普通のプログラマは下記のようなコードを書くと思います。
1 2 3 4 5 6 |
var r = 0; for (i = 0; i < 10; i++){ var r = r + i; } console.log(r); |
何の問題も無いシンプルなコードですね。
ただし、これを関数プログラム的に書くと、下記のようになります。
1 2 3 4 5 6 7 |
var plus = function (a, b){ return a + b; } var data = [0, 1, 2, 3, 4 ,5, 6, 7, 8, 9]; var r = data.reduce(plus); console.log(r); |
「関数が1つ増えて見づらくなった」って意見もあるかと思いますが……。
でもこのコードには、バグや複雑さの原因となる下記の要素が入っていないのです。
- for文が出てこない
- 状態管理変数が出てこない(iなど常に変化する変数)
- 再代入が出てこない(rの値が書き換わる)
そして、
「0から9までを全て加算せよ」
の問題を忠実に再現しているのです。
- 0から9まで→ [0, 1, 2, 3, 4 ,5, 6, 7, 8, 9]
- 全てxxせよ→reduce
- 加算→plus
参考:reduce()メソッドの解説
隣り合う 2 つの配列要素に対して(左から右へ)同時に関数を適用し、単一の値にします。
問題を忠実に再現するということは、バグが入り込む余地がないということです。
問題に無い、
「iを0から、10より小さい間、1つずつ加算して」
や
「結果に加算した値を、再度結果に設定する」
などの命令が存在しないのです。
関数プログラミングを語る知識はまだありませんが、上記の例は、良いコードを書く上で良いヒントになると思い紹介しました。
また、わかりやすい例があったら紹介したいと思います。
ではでは。
ランキング
- 小さくても気を付けたい、紙書類の扱いポイント3つ
- 質問できない人への処方箋
- 報連相できない人をできるようにする方法
- .NET でプログラムの処理時間をストップウォッチで測る(Stopwatch クラス)
- ASP.NET MVC5 で初期エラーメッセージの変更方法
- Javaでjsoupを使ってスクレイピングを行う方法-jsoupインストール編
- プログラミング始めるなら!アルゴリズムを学べるスマートフォンアプリ3選
- 2016年度版 無料でSQLの学習ができるサイト11個を調べてみた
- プログラミング言語を学ぶなら「アルゴリズムとデータ構造」から学ぶのが近道です
- プログラミングの「アルゴリズムとデータ構造」を学ぶには「Scratch」を使えば挫折が防げます