generated at
宣言的と手続的とは、「目的の宣言」と「手段の命令」のこと

宣言的とは、どうあるべきか(what)を書くこと
なので、これは目的
手続的(命令的)とは、どう実現するか(how)を書くこと
こっちは手段


目的の読み書きがしやすいのが大事
だから、目的と手段を分離すると良い

記事にもしといたmiyamonz


Array.prototype.mapという手段を用いて記述することで、「要素を2倍する」という目的が簡潔に書ける
手段の部分をmapの実装部分に任せている

宣言的UIとは、UIにおいて必要になってくる具体的な手続き、手段をライブラリ内に隠蔽している
DOM操作
アプリケーションの特定の状態を画面に反映させたり、インタラクトするという目的を直接的に記述できる

mapのコードの色分けでの説明が示しているように、厳密には、宣言的なコードとは、「宣言的に書ける」これ自体だけではなく、
「目的の宣言」の記述箇所と、「手段の命令」の記述箇所が、疎結合であるという認識のほうが正確である。
その上で、前者部分の場所を宣言的と言っている
で、手段の部分がライブラリで提供される場合は、手段の記述がライブラリの実装の内側に移動するので、コードを書く人にとっては見えなくなる

なので、「宣言的コードを書こう!」と捉えるよりは、「目的と手段を分離してコードを書く」と捉えたほうが、実践に移しやすい。


そういえば、アプリケーションのコードを書く能力と、ライブラリを書く能力は違うよね、という話もあったが、ここの概念も近いところにあるだろうか
単に、OSSのように、contributeが開かれている環境下でのチームのorganizeがある種特殊技能である、というところもあるが
アプリケーションコードは目的の達成が主眼であり
ライブラリは、良い手段の提供(と、場合によっては、解決手段の提案)が主眼である



-----------


宣言的なものは、それを実際にどうさせるために、内部でなんかする
手続き的なものの上で実装される
reactのreconcilerとか

Want とHow toなので、これらは対立ではないが、離れた場所におかれる2つの概念である
基本的には、第3の概念は無い、と見ていい

宣言したい概念、タイプが2つ以上あって、それらをどう解決するか、というものはあるかもしれない
その場合はかなり複雑になりそう
パッと連想したのがkubernetes
触ったこと無いので分からんが

対立概念ではないとも思っていたが、そうでもない気もしてきた

whatは目的、howは手段と見れるので、目的と手段という軸で見れる
問題とそれに対する解決
目的とそれに対する手段
この様に捉えれば、宣言的と手続き的というのは、対立した軸をなす

SICPにもこの対立は述べられていた
LISPは宣言的に書けるので
どこに書いてあったっけ




「コーヒー頂戴」
オートマとマニュアル
マニュアルは、ギアチェンジという手段を明示的に操作する
オートマは、動作方向(進む、戻る、止まる)という目的の挙動だけを指定してる。