主要的編程范式有:
命令式編程(Imperative Programming)
聲明式編程(Declarative Programming)
函數(shù)式編程(Funational Programming)
面向?qū)ο缶幊蹋∣bject-oriented Programming)
...
React推行的是聲明式編程的思想,下面來對比學(xué)習(xí)下命令式編程與聲明式編程,理解其中區(qū)別,以便于掌握React。
命令式編程
命令式編程描述代碼如何工作,告訴計算機一步步地執(zhí)行、先做什么后做什么。
比如,去酒吧點一杯酒,指揮服務(wù)員:
從架子上取下一個玻璃杯;
把杯子放在酒桶前;
打開酒桶開關(guān),直到酒杯滿;
把杯子遞給顧客;
這就是按照聲明式方式點一杯酒的,需要告知服務(wù)員如何給顧客提供一杯酒。
這里有一個代碼示例,編寫一個函數(shù),處理傳入包含大寫字符串的數(shù)組,返回包含相同小寫字符串的數(shù)組。
toLowerCase(['FOO', 'BAR']); // ['foo', 'bar']
命令式函數(shù)實現(xiàn):
const toLowerCase = arr => {
const res = [];
for (let i = 0, len = arr.length; i < len; i++) {
res.push(arr[i].toLowerCase());
}
return res;
}
首先,創(chuàng)建一個空數(shù)組用于保存結(jié)果,然后遍歷輸入數(shù)組的所有元素,將每項元素的小寫值存入空數(shù)組中,然后返回結(jié)果數(shù)組;
聲明式編程
聲明式編程表明想要實現(xiàn)什么目的,應(yīng)該做什么,但是不指定具體怎么做。
聲明式點一杯酒,只要告訴服務(wù)員:我要一杯酒即可;
聲明式編程實現(xiàn)toLowerCase:
const toLowerCase = arr => arr.map(
value => value.toLowerCase();
)
輸入數(shù)組的元素傳遞給
map函數(shù),然后返回包含小寫值的新數(shù)組
對比
相對比而言,聲明式編程
更加簡潔、易懂,利于大型項目代碼的維護;
無須使用變量,避免了創(chuàng)建和修改狀態(tài);
React中的聲明式
示例:帶有標(biāo)記的地圖
JavaScript 實現(xiàn)
const map = new Map.map(document.getElementById('map'), {
zoom: 4,
center: {lat,lng}
});
const marker = new Map.marker({
position: {lat, lng},
title: 'Hello Marker'
});
marker.setMap(map);
這是在JavaScript中命令式創(chuàng)建地圖、創(chuàng)建標(biāo)記以及在地圖上添加標(biāo)記的步驟;
React組件中顯示地圖的方式:
<Map zoom={4} center={lat, lng}>
<Marker position={lat, lng} title={'Hello Marker'}/>
</Map>
聲明式編程方式使得React組件很容易使用,最終的代碼簡單易于維護。