宣言型プログラミング
#プログラミングパラダイム
https://www.notion.so/5e5fc0b9d8a34dd8b05713d392cfa67e
https://ja.m.wikipedia.org/wiki/宣言型プログラミング
数理論理学的な性質を表わしている総称的なプログラミングパラダイム
式の計算構造を、主に表示的意味論下のロジックで表現する
宣言型言語は、what the program must accomplish(何をなすべきか)方針で、副作用を排除した式や純粋関数の実装に努める。
これは命令型言語の、how to accomplish it(どうなすべきか)方針で、副作用を前提にした操作的意味論下のアルゴリズム実装とよく対比される
対義語は命令型プログラミング
それが「何であるか」を記述する→What
目的思考, 逆算思考, 仮説思考で在るべき形を意識する
ドメインの文脈や依存関係に着目してプログラミングする
命令型プログラミングは処理とその依存関係を全て一つの関数に埋め込む
宣言型プログラミングは依存関係そのものをコードに示す
処理の詳細はドメインモデルなどに閉じ込める
例: ソフトウェア工学としてのオブジェクト指向
関数型プログラミングと型システムのメンタルモデル
代表的なものにRailsやReactがある
GUI開発ではこのスタイルが主流
React Docs > How declarative UI compares to imperative
Reactでは、このDOMの状態更新の手続きを隠蔽する
状態を更新する際に前回のUIの状態を考慮せず全部作りなおすことで一貫性を保つ
銀の弾丸ではない
開発コストを低く見積もってしまう罠
全てを宣言的にするとデータフローが複雑になる
Pub/Subやアクターモデルとも親和性が高い