『なっとく!関数型プログラミング』
https://gyazo.com/74b809dac326e0f035275485694a5058
2023/8/3
Michał Płachta 原著
株式会社クイープ 翻訳 監修
翔泳社
書評
『なっとく!関数型プログラミング』は読者の理解度の進捗を先読みして作り込まれた”プログラミング入門”の良書 - Magnolia Tech
べた褒め
説明の順序が良いらしい
良い本で人に薦めるんなら読んどいた方が良いかもな、ぐらいの気持ちmrsekut.icon
ということでポチった
Javaで書かれた命令的なコードを、Scalaで書き直していくスタイル
Part 1 関数型ツールキット
第1章 関数型プログラミングを学ぶ
宣言的な命名
第2章 純粋関数
めちゃくちゃハンズオン的だな
命令的なコードを、宣言的に変えていく、という説明は、
命令的なコードを書いている人がターゲットだと、かなり良い解説な気がする
純粋関数と単一責任は関係ないだろmrsekut.icon
第3章 イミュータブルな値
mutableにすると考えることが増える
コードを読むときに予測しないといけないことが増える
いったんJavaでFP的な書き方を示すことで、Javaの微妙さを浮き彫りにしている
mutableの悪さの具体例集のような感じ
個人的には当たり前だろう、という感じのものであるmrsekut.icon
が、実際、こういう方針で今も書き続けられているのだろうか
OOPの文脈でもimmutableにしよう、というのは言われて久しい気もする(?)が
mutableにやったときの辛さを改めて見れてよかった
JavaにはCollections.unmodifiableListというmethodがあるらしい
Listを引数に取り、変更できないListを返す
この返り値のListにも.addを呼べるが、実行時エラーになる
うーん
Scalaの具体例でindexを使いまくってるの、どうにかならんのかmrsekut.icon
第4章 値としての関数
最初のページに書いてる要件のやつ読み進める前に解いてみるmrsekut.icon
hsで書いてみるとこんな感じか
code:hs
rankedWords :: String -> String
rankedWords = sortBy . flip $ comparing score
score :: String -> Int
score = length . filter (/= 'a')
comparingを使うことでかなりシンプルに書ける
読み進めてみた(p.90)が、ほぼ同じだった
comparatorを引数で渡すべき、
まあ、要件によってはそういうこともあるでしょう。
なんかずっとJavaの話してんなmrsekut.icon
JavaでFPする本なのか
説明の都合上ボトムアップなのでやや分かりづらいが、N個の要件をN個の要素で書くとほぼ同じことを言っている
p.92
Part2 関数型プログラム
第5章 逐次プログラム
第6章 エラー処理
第7章 型としての要件
第8章 値としてのIO
第9章 値としてのストリーム
第10章 並行プログラム
Part3 関数型プログラミングの応用
第11章 関数型プログラムを設計する
第12章 関数型プログラムをテストする