タグ

ブックマーク / ekicyou.hatenablog.com (2)

  • 関数型言語で工数削減できる理由、後編 - えちょ記

    で、結局どうなのよ、という話。まあ、いい話も悪い話もあったりするのですが。 値のバグについて追跡が容易 ある変数の値がおかしいとき、一般の言語ではその値の出所(バグコードの場所)を特定することが困難になりがちです。どこで値が再設定されるのか追いきれないからです。しかし再代入不可タイプの関数型言語の場合、その値を設定した箇所は1箇所に特定できます。値がおかしいということは、その式がおかしいのか、その式に含まれている変数の何れかがおかしいのか、どちらかです。 つまり再代入不可である限り、値のバグはコードを追うだけで特定可能です。ステップ実行で追いかけないと見つけられないようなバグにはめったに出くわしません。 並行処理によるスレッドの相互干渉箇所を限定しやすい 「変数の再代入不可」であれば、一旦確定した値の参照は何度でも、たとえ同時に行っても値は同じままです。この特徴はマルチコアにおける並行処理

    関数型言語で工数削減できる理由、後編 - えちょ記
  • 関数型言語で工数削減できる理由、前編 - えちょ記

    「関数型言語は開発効率が良い」とよく言われます。「オブジェクト指向と比べて‥‥」なんてつい比較してしまうがゆえに論争っぽいループが発生したりするのを良く見かけますが、まあそれはおいといて、実際なぜ効率が上がるのか考えてみました。 関数型言語が採用する概念のうち、特に工数削減に貢献する要素を挙げてみます。 パターンマッチ プログラムでは条件に応じて処理を仕分けることが多々ありますが、入り組んだIF文はそれだけでプログラムの意図が分かりにくくなりバグの温床となります。 モダンな関数言語では、条件判断記述を関数の入り口に設置し、条件を満たしたときだけ関数の体を実行するような構文が書けるタイプの文法を採用しています。このような構文は、コンパイル時或いは実行時にIF文が合成され、パラメータにより処理が分岐されます。CやJavaなどのswitch-case構文をものすごく強力にしたもの、と考えればい

    関数型言語で工数削減できる理由、前編 - えちょ記
  • 1