Day20【Dev】编程方法:Imperative 与 Declarative

Imperative Programming(命令式/指令式编程)

  • 对程序说明「How to do」,详细指示每个行动
  • 程序完全按照你的命令行动(How),不管也不会知道你真正想要的是什麽(What)

Declarative Programming(宣告式/声明式编程)

  • 对程序说明「What to do」,对它声明想达成的结果
  • 告诉程序你想要的是什麽(What),让程序自己想办法去实现(How)
  • 将实现的方式抽象化,简化程序逻辑

实际范例

目标:将一个 Array 的所有值加总

Imperative 写法

var array = [3,2,1]
var total = 0
for( var i = 0 ; i <= array.length ; i ++ ){
    total += array[i]
}

Imperative Programming
会写出完整的计算过程,
如果演算非常复杂,
甚至出现巢状 loop 或巢状 object 时,
在画面上会出现许多判断与加减计算,
钜细靡遗地告诉程序该「如何」做到。

Declarative 写法

var array = [3,2,1]
array.reduce( function( previous, current ){ 
    return previous + current 
})

Declarative Programming
则直接向程序宣告我想要的东西是什麽。

如上范例中,我要程序进行一个「reduce」,
并说明计算方式是「previous + current」,
至於实际要如何达成,则完全交给程序处理。

Declarative 的作法是将行为抽象化,
并把具体执行方式都封装在
Array.prototype.reduce() 里,
不再需要额外的变数,尽可能减小变动,
以降低BUG产生的机会。

同时 Declarative 也具有明确的语意,
可以从宣告中理解执行的工作内容,
比 Imperative 拥有更高可读性。

但使用 Declarative 的前提是,
JS 程序认识 reduce 这个方法,
知道该对资料进行何种处理。

另外,由於已经对行为抽象化,
具体实作方式完全交给了程序,
Declarative 在实际操作中的灵活性相对较低。


参考资料


<<:  【Day 20】全局储存库 Context

>>:  Day24 - 静态模型 part2 (CNN)

Youtube Data API 教学 - 有字幕好安心 Captions.list

「鲑鱼均,因为一场鲑鱼之乱被主管称为鲑鱼世代,广义来说以年龄和脸蛋分类的话这应该算是一种 KNN 的...

Kotlin Android 第17天,从 0 到 ML - MVVM架构 - LiveData

前言: 学会了ViewModel,接下来就是建立观察 LiveData。 大纲 : LiveData...

# Day21--Git标准姿势?基本动作?

在接下来几篇的文章中,大概会提到所谓的Git,後来听许多前辈说,Git是工程师非常加分的条件,虽然自...

[Day19 ] Prototype Pollution - Prototype污染

前言 你使用过Prototype,那你知道它可以被污染吗? 正文 概念 Javascript的物件透...

[day6] AES-CBC 内文加密机制(Message)

讯息文本使用AES-CBC模式加密传送,接收的结果亦以相同规则加密 必要的参数 如何取得 JSON讯...