たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

宣言的・宣言型・冪等性・状態

  • 宣言的/declarative
    • 「ライトはONになる」
  • 命令的/Imperative
    • 「ライトのスイッチを押しなさい」

宣言型だと状態を指定する感じになるので、現在の状態に依存しずらい.
現在ライトがONだろうとOFFだろうと、「ライトはONになる」と宣言されているのでライトはONになる。

命令型だとそうとも限らない。
階段の上下にスイッチがあるライトだと、今がONなら押すとOFF、今がOFFなら押すとONになる。
もちろん、ONスイッチとOFFスイッチがあってONスイッチを押すと常にONになる場合もある。

宣言型だと結果は「直接宣言するもの」である。
命令型だと結果は「命令の処理後に得られるもの」である。
欲しいものを宣言するか、行われる操作を命令するか。

いわゆる冪等性の議論に少し絡んでいる。
宣言型はあるべき状態を宣言するので冪等性をもっている。
同じ宣言を何度繰り返しても、同じあるべき状態を何度も示しているだけなのでどの段階でも状態は同じ.
現在の状態に依存していないので、暗示的な状態入力がないともみれる。ちょっと関数的(普通はサブルーチン内で外部のライト変数を変更するから副作用があって純粋な関数ではなくなるけど。状態を吐き出す関数なら純粋関数型になる。)

decNotFunctional = (nextState) => void  
decFunctional = (nextState, currentOtherStates) => nextStates  
impNotFunctional = (order[, currentState]) => void
impFunctional = (order, currentState, currentOtherStates) => nextStates  
// 宣言的 - declarative
type lightBecome = (state: "ON" | "OFF") : void;

lightBecome("ON") // lightState == ON
lightBecome("OFF") // lightState == OFF

// 命令的 - imperative
type switchLight = () : void;

switchLight() // if stateNow == ON, lightState == OFF, else if stateNow == OFF, lightState == ON

(詳細はWikipediaに移した)