https://youtu.be/GYCofVVDaok • 『関数型ドメインモデリング』 という書籍の原著者 • 「直和型とレコード型を駆使しドメインモデリングを正確に表現することで保守 性が向上するだけでなく動作可能なドキュメントとしても機能する」 • (感想)すべてを(純粋関数型ではない)Julia で実践することは難しいが、関数 型プログラミングのコアは分かりやすかったし、基本的な内容は Julia でも応 用できるものも多くて非常にためになった。 • (次以降、特に有用だと思った内容をいくつか紹介) What I have learned from 15 years of functional programming by Scott Wlaschin (1)
2. Functions are like lookup tables (訳:関数はルックアップテーブルのようなものである) 3. Build bigger functions using composition (訳:小さな関数を組み合わせて大きな関数 を構築する) 4. Types are not classes (訳:型はクラスではない) 5. Build bigger types using composition (訳:型を組み合わせて大きな型を構築する) • (感想)簡潔にして核心。これらを意識したプログラミングをするだけで洗練され た間違い(不具合)の少ないコードが書ける(関数型言語でなくても、例えば Julia でも) What I have learned from 15 years of functional programming by Scott Wlaschin (2)
predictable.” ◦ 訳: 「関数はルックアップテーブルのようなもので、完全に予測可能である」 • (純粋)関数は 参照等価(であるべき)ということを言い方変えたもの • (感想)Julia では純粋でない(参照等価でない、副作用バンバンにある)関数が 自由に書けてしまうが、少なくとも引数に対して 戻り値が完全に一意 となる関 数を書くように心がければ不具合減らせる。 What I have learned from 15 years of functional programming by Scott Wlaschin (3)
out of objects and classes.” ◦ 訳: 「オブジェクトやクラスから作るのではなく、関数から作ること」 • その前に「小さなものから大きなものを作る方法は」という枕詞がある • あとその後に「型はクラスではない、集合に近いもの」という説明が続く • (感想)これまさに Julia が得意とする設計思想。翌日の私の発表スライドにも このあたりの話は元々盛り込まれていた(関数レベルの抽象化→引数別の実装 →その組合せでプログラム作成)。 • (感想2)あと「型はクラスではない」はその夜スライド編集して Julia の紹介に 含めた(Julia にはクラスはない、Julia の型はクラスではない) What I have learned from 15 years of functional programming by Scott Wlaschin (4)
a class.” ◦ 訳: 「関数は独立したものであり、クラスに紐づけられるものではない」 • スライドには「言い換えると再利用可能!(Another word for reusable!)」とい う手書きの注釈が付いている • (感想)Julia にもマッチする概念。ただし Julia は 総称関数(generic function) → 引数(型シグニチャ)ごとの実装(アドホック多相) という概念も 入り込んでくる What I have learned from 15 years of functional programming by Scott Wlaschin (5)
• 「単一責任の原則」「オープンクローズド原則」などとの関係性も解説 • (感想)Julia にも(F#由来の) パイプライン演算子 |> が存在。それを自然に利 用しやすくするパッケージ(例:私のスライドで挙げたものだと Transducers.jl)もある(元々私のスライドでも紹介してた)。 What I have learned from 15 years of functional programming by Scott Wlaschin (6)