yukungのブログ

yukungの技術ブログ兼駄文置き場 

関数型言語の開発効率が良いと言われる所以

以下は個人的なメモ書きでサイトのただの写し。詳細は以下のサイトを。

パターンマッチ

  • 関数の入り口に条件判断記述をする
  • コンパイル時あるいは実行時にif文が合成され,パラメータで処理が分岐する

末尾呼出しの最適化

  • ループではなく再帰で繰り返しを表現する

変数の再代入不可

  • デバッグを行うときに威力を発揮する
  • 再代入不可である限り、値のバグはコードを追うだけで特定可能
  • ステップ実行で追いかけないと見つけられないようなバグには滅多に出くわさない
  • 並行処理によるスレッドの相互干渉箇所を限定しやすい

高階関数

  • 関数を引数として受け取る関数のこと
  • 個々の関数を使い回せるように「分かりやすい単位で処理を分けた関数を用意して、後で組み合わせることができる」
  • 大雑把に言えば全ての関数がジェネリックの適用対象になるようなもの
  • 基本的に同じアルゴリズムが適用できるなら、プログラムは同一関数+違いがある部分のみ別の関数、といった組み合わせに置き換え可能

コードの密度が濃くなる

一般に,手続き型言語に比べて,1行あたりに表現できるアルゴリズムの要素が多くなる。それによって,コードの質が高くなる。

  • それなりの学習が必要なため,コードをかけるようになる段階で最低限の作法が身に付くから
    • COBOLとは真逆の考え方?COBOLはド素人でもロジックを記述できるようにする言語*1。だから人身売買が横行する

ガベージコレクタが必要になる

再帰や再代入不可の特徴により,プログラムが動き続ける限り無限に変数を生成するため。つまり,GCにまつわる小さいオーバーヘッドを受け入れる必要がある

*1:本当はエンドユーザでも使えるような言語を目指した。エンドユーザコンピューティング,なんて死語というか幻?