react特性 宣告式程式設計

2022-04-23 09:44:03 字數 1936 閱讀 8541

網路上有很多關於宣告式程式設計和命令式程式設計的對比和說明,但是大多都是大同小異,總的來說就是一句話"告訴電腦我要做什麼,但是讓電腦自己決定怎麼做."

1.命令式程式設計.

這種程式設計模式比較常見,也是我們比較好理解的方式.它把完成某個需求的每一步都充分展示出來了,一步一步地指揮計算機做事情.

var array = [1,2,3,4,5]

var newarray =

for(var i = 0; i < array.length; i++)

console.log(newarray)

//=> [0,1,2,3,4]

特點:在執行完之前,計算機並不知道我要做什麼,為什麼這麼做.它只是一步一步地執行了.

2.宣告式程式設計.

區別於命令式程式設計,它的特點就是我告訴計算機做什麼,但是沒有告訴你怎麼做.

var array = [1,2,3,4,5]

var newarray = array.map(function

(n) )

console.log(array)

//=> [0,1,2,3,4]

我只告訴計算機,你執行這個map函式就好了,至於我要幹嘛我不告訴你,具體怎麼做也不告訴你.

3.思路對比.

如果還是不清楚,那我再拿個案例來分析.

命令式程式設計---------------

var array = [1,2,3,4,5]

var total = 0

for(var i = 0; i < array.length; i++)

console.log(total)

//=> 120

宣告式程式設計-----------------------

var array = [

1,2,

3,4,5]

var total =array.reduce(function(sum, n) );

console.log(total)

//=> 120

說明:相比於命令式程式設計,宣告式程式設計最大的特點是沒有"if"、"for"這類的控制語句,而是直接給乙個函式,並且宣告乙個變數接收函式執行結果,讓計算機把資料當作引數放進去執行一遍就行了.

4.統一性

到目前為止,很多人說這兩個程式設計正規化是對立的.我覺得這並不準確,並不是說宣告式程式設計的思想是盡可能少的**實現,那命令式就盡可能多.這並不嚴謹,那如何理解他們的關係呢?

仔細看上面**對比,你發現差別就是在紅色字型處.假如:

先宣告乙個函式:

function reduce(array,total)

return total

}

命令式程式設計---------------

var array = [1,2,3,4,5]

var total = 0

var total = reduce(array,total);

console.log(total)

//=> 120

如果不看函式的宣告,是不是很像宣告式程式設計?如果把reduce函式給array的原型,從**形式上就更像了.當然,我們這裡不討論array.reduce()的具體功能.只是從**特點上來說:宣告式程式設計就是函式程式設計思想的一種.其實就是凸顯了函式式程式設計的宣告性.

結論:宣告式程式設計就是拿來主義,拿已經封裝好的純函式來實現目的.但是實際上執行的步數不見得會比命令式的**少,有時候甚至會更多.但是,由於這些純函式有極強的穩定性,所以程式設計師根本不用考慮內部的具體實現過程.極大地減少了身心負擔.

宣告式程式設計與命令式程式設計

先統一一下概念,我們有兩種程式設計方式 命令式和宣告式。我們可以像下面這樣定義它們之間的不同 命令式程式設計 命令 機器 如何去做事情,告訴它如何去做。宣告式程式設計 告訴 機器 你想要的是什麼,讓機器自己去做。宣告式程式設計和命令式程式設計的 例子 舉個簡單的例子,假設我們想讓乙個陣列裡的數值翻倍...

宣告式程式設計和命令式程式設計

宣告式程式設計是一種程式設計正規化,它關注的是你要做什麼 what 而不是如何做 how 也就是你只需要告訴 機器 你想要的是什麼 what 讓機器想出如何去做 how 舉例 想要顯示乙個p標籤 this is a textp 查詢學生中年齡大於18對的學生的資訊 select from stude...

命令式程式設計和宣告式程式設計區別

我是個新手,雖然在某個領域還算可以,但是在net,還算個新手。還需要向各位學習。今天做了個例子,是把相同地域的學生進行分組。想看看2種方式的區別,有很多不懂地方,還要向大俠請教。有個方法是別人幫我編寫的,還有些不懂。請教下。例項 1 public class student24 public str...