Expression Problemまとめ
様々なプログラミング言語のプログラミングパラダイムについての長所と短所を議論する際に用いられる用語.
型変換や条件分岐を使用せずに、既存のデータ型に機能を追加するにはどうすれば良いのか、という問題.
- データ型の追加
- 条件分岐
- switch
- パターンマッチ
- Visitor Pattern
- オブジェクトにる条件分岐.
- multimethod
- OOP
- 関数の追加
- インタフェース
- テーブルジャンプ
- 手続型の解決方法.
言語別
📝多重ディスパッチ
2個のオブジェクトから、それに対応する実際の手続きが実行時に決まる、というもの.
- 普通のobj.callはシングルディスパッチ.
- 実行時のオーバヘッドとのトレードオフ(Javaのオーバーロード).
📝構造化パターンマッチ(Structural Pattern Matching)
パターンマッチ(pattern matching).
📝Elixerはパターンマッチを言語で強力にサポートしているため有名.
overlapping pattern: 重複パターン
ボリモーフィズムによってパターンマッチをする方法.
ref. Meaning of overlapping pattern in Haskell - Stack Overflow
数学的帰納法によって, 定義される関数.
last :: [a] -> a
last [x] = x
last (_ : xs) = last xs
if文は手続き的でパターンマッチは宣言的
パターンマッチはif文やcase文で比較すれば書けるものの, この記法が特に関数型言語のコミュニティで人気なのは, 宣言的なシンタックスだからだと思う(逆にifのようなフロー制御は命令形なので嫌われる). 当たり前のようにif文のかわりにパターンマッチを多用すれば納得.
see more
Topics
スパゲッティコード
スパゲッティみたなコード. goto文.
🔖ウンコード
うんこみたいなコード.