では､ 関数型プログラミングとは何でしょうか｡
関数型プログラミングは関心事の分離が重要ですが､ これはオブジェクト指向プログラミングも同じですよね｡
これは､ コードを別のチャンクにパッケージングすることで､ コードの各パートにすべてがうまく整理されるようにすることです｡
そして､ 各パーツは機能性に基づいて理にかなった形で構成されています｡
つまり､ 各パーツが得意なことを1つに絞るということです｡
オブジェクト指向プログラミングのセクションで､ 例えばウィザードクラスとアーチャークラスの属性とメソッドを分けるために2つのクラスを用意したのを覚えています｡
また､ 関数型プログラミングでは､ 関心事を分離するという考え方がありますが､ データと関数を分離することもできます｡
それが､ 関数型プログラマーの世界観です｡
メソッドとアトリビュートを組み合わせるのではなく､ 2つの異なるものがあるため､ 分離しています｡
データがあり､ このデータは相互作用し､ 作用する｡
しかし､ オブジェクト指向プログラミングで見たような､ データと機能の両方を1つのオブジェクトとして結合することはしません｡
今､ 何が機能的で､ 何が機能的でないのか､ 正しい定義はありません｡
しかし､ 一般に関数型言語では､ データや関数がシンプルであることが重視されます｡ なぜなら､ ほとんどの関数型プログラミングパラダイムでは､
クラスやオブジェクトという考え方がないからです｡
その代わり､ 関数はそのデータ構造をオブジェクトに所属させるのではなく､ リストやディクショナリのようなよく定義されたデータ構造を見た上で操作します｡
しかし､ 結局のところ､ 関数型プログラミングパラダイムの目標は､ オブジェクト指向のパラダイムと同じである｡
それは､ 私たちのコードをきれいでわかりやすく､ 簡単に拡張できるようにすることです｡
つまり､ 自分たちのコードをどんどん育てて､ より良いものにし､ 他の人が来てコードを拡張することができるのです｡
メンテナンスもしやすくなりました｡
また､ 情報をあちこちに保存しないので､ コードのメモリ効率も良くなります｡
さて､ 関数型プログラミングに至っては､ 非常に重要な柱があります｡
また､ オブジェクト指向プログラミングとは異なり､ カプセル化､ 抽象化､ 継承､ ポリモーフィズムという4つの柱があります｡
関数型プログラミングで物事を分解していくと､ 純粋関数という概念に行き着きます｡
しかし､ ここでの考え方は､ プログラムのデータとプログラムの動作は分けて考えるということです｡
そこで､ 純関数について詳しく調べてみましょう｡
どういう意味ですか？
どんなものですか？