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