21日目-2: 関数型プログラミング言語をかじってみて
ご挨拶
こんばんは。Tosh でございます。
サボりサボりのブログですが、毎日書けるほどネタがないんですorz
というわけで、今回は技術的な話はあまりしません(;´Д`)
関数型プログラミング言語をかじってみて
タイトル的にも内容的にもいくらでも叩かれそうなんですが、私の関数型プログラミング言語の習熟度って
- Haskell
- Monad?Functor?ようわからん(・∀・)
- Common Lisp(SBCL)
- 関数調べながらなら Haskell よりは書ける
が、実用的なシステムを作るには至らず
- 関数調べながらなら Haskell よりは書ける
- Scala
- コンパイルできないorz
という程度なんです(泣)
とはいえ、そのレベルでも他の言語を書く際の意識が多少変わるので、3点ほど挙げてみたいと思います。
※効果には個人差がございます。
記述量が減った、記述が簡潔になった
言語や処理によるとは思いますけど、「カウンタ設けてループ回して……」とか「イテレータ使用して……」としてリストの中身を1つずつなめて抽出や変更していくよりもラムダ式でフィルタリングかけたりマッピングかけたりする方がシンプルだったりします。
とはいえ、Java で言う Stream API とか C# でいう Enumerable な形に持っていくのにいくつもメソッドを噛まさないといけないのであればその限りではありませんが……
参照透過性を保ちやすくなった
上記と関連して、状態を管理するような変数を使用する機会が減れば実行結果を予測しやすくなると思われます。
関数の動きはなるべく関数名と引数から予測できるようにしたいものですね。
副作用を意識するようになった
これまた前述までの項目とかぶりますが、関数の引数と戻り値のほかに発生する入出力も意識するようになり、ある程度デバッグしやすい記述ができるようになりました(……と思いたいです)。
ではでは、今日はこの辺で。