宣言的ってなんだっけ
https://speakerdeck.com/sonatard/xuan-yan-de-ui
このスライドのおかげでなんか宣言的という言葉が広がり始めた気がする
https://qiita.com/sl2/items/93e2e385a5bc48284849
この記事がpete huntのブログに言及してる
reactの開発者
react作る前の言葉
マークアップにロジックを埋め込まず、Pythonでマークアップを操作すべき
(テンプレートエンジンの)pullモデルではなく(DOMの)pushモデルに転換しよう
「テンプレートエンジンのDSLによってではなく、ネイティブな言語によってDOMを操作しよう」
「ネイティブな言語で作成したDOMをHTMLにpushしよう」
これらを言い換えると宣言的という意味になるはず
ネイティブな言語で記述する
domを構築してpushする
このpushする記述内容が「view(見えるもの)の宣言」にあたいする
テンプレートのしんどさから、2010年に既にこの概念に気づいて、そしてpythonから始まりjsにも乗り換えて作っていたというのはすごい
宣言的←→命令的 ってのはたしかに概念は分かるのだが、上のようなことを考えたほうが分かりやすいと思う
なぜなら、命令と宣言の言葉のニュアンスが
ここで指摘したいイメージを区別するためには適切でない
だって命令的な操作だって
hoge.appendChild(div) ここにあれを追加しろ!と宣言しているように見えるし
コンポーネントの宣言だって、renderを命令してるとも言えないか?
特定の属性などで軸を取った上での対立概念ではない
文系と理系くらいの雑な分類だと思う
ロジックに基づいてコンポーネントを構築して、最終的な出力を得る
という点では、主導権をロジックが持つといえる
こういう流れを考える
state -> なんらかの変換 -> 最終的なhtml
「宣言的」記述というのは、
こういうstateだったらこう書け、という宣言をしているわけだが
流れにおいて、左側が主導権を握っているということになる
「命令的」記述というのは
すでにあるhtml等に対して、命令で追記している
https://twitter.com/t_wada/status/670521555437252609
imguiって宣言的だったっけ そういえば
laravel内の依存注入って宣言的っぽいなと思った
authの仕組みとか
コントローラとか、フレームワークの内側では
ログインされてなかったらここでリダイレクト
みたいなのが書きやすい
その場所で、具体的なログイン手法を記述しない
外側のauthのプロバイダを定義して、それで具体的な解決方法を書く
そうすると実は宣言的って、依存の注入, inversion of controlの1パターンなのか?
宣言的な手法は、その宣言が実際にどうやって実行されるかがわかりにくい、追いかけにくい傾向がある
知らなくても構築できるくらいに抽象化してくれていると助かる
reactは結構大丈夫。ライブラリの中身全然読んだこと無い
追いかけたいときにつらい、というのはある
reactのソース読もうとしたことあるけどよくわからんかった
手続き的な書き方は、追いかければ、
なぜなのかがわからなくても、具体的な意味が分かる 抽象的な意味が分からない or 考えられていない
宣言的な書き方は、
抽象的な意味を宣言しているが、それの具体化方法が追いかけにくい
抽象と具体の中間あるいは変換をどうやってやるか、考えるか、ということってあまりドキュメントされてないように思う。
オープン思考ソフトウェア
こういうのって、何かを理解するための小さめなモックを作る感じの記事が訓練になるんじゃないかと思っている
build your own hoge
小さいエディタ作る、git作る、やつ
SICPにも、手続き的、宣言的という言葉が出てきた
LISPが宣言的に書けるという話
その頃から、この2つの対立な概念はあったということ
宣言的←→手続き的の軸は、目的と手段と捉えると良さそうmiyamonz.icon
目的を記述すると、適切に手段が動いてくれるような仕組み、フレームワーク等を、宣言的と呼べそう
手続きは、手段を明示的に自分で記述しているもの、と言える
メモリ確保は手続き
99%以上、手段であり、目的ではない
明示的に扱う言語は、GCに任せられないから自分で明示する
目的に対して、機械的に手法を選べないから、明示的に指定をしないといけない
reactとそれ以前のテンプレートエンジンも、この関係がありそう
reactは、宣言的に記述しやすい
テンプレートエンジンは、気を抜くとすぐに手続き的になる
手段を記述しやすいが、目的を記述するのは難しい
できないことはないと思う
でも、手続き的に引きづられやすい
どうしても、目的のみの記述に徹することができないなら、オプションとして、その目的の解決手段を、少し記述する必要があるだろう
こういうときは、宣言的、手続き的の間のグラデーションがあることになる