宣告式和指令式開發 Declarative and Imperative Paradigm
在花時間處理這個只能在軟體工程師的小圈圈中討論的主題之前,先讓我們抽離工程師的角色,把視野放大、拉遠一些。
軟體工程師之於整個社會的專業在於:我們能利用程式語言,指揮電腦,解決各式各樣的問題,而其他人在這方面的能力比較薄弱或受到極大的限制。
在我們解決問題的過程中,會自然的發展出以下兩個階段:
- 撰寫程式,解決問題。
- 思考不同撰寫程式的方法,是否有助於更好的解決問題。
而我們今天要討論的主題,落在工程師發展的第二階段。
富有經驗的軟體工程師,經常能使用好幾種方式,解決相同的問題。經過長時間的累積之後,我們歸納出兩種程式的撰寫模式:宣告式 Declarative、指令式 Imperative
以下簡單的說明這兩種模式的基本觀念,並使用 JavaScript 提供幾個範例讓大家參考。注意,每個範例提供的兩種程式碼,都解決相同的問題。
宣告開發模式 Declarative Paradigm
程式碼傾向被理解成抽象的、高層次的、容易被人類接受的整合式概念。
指令開發模式 Imperative Paradigm
程式碼傾向被理解成具體的、低層次的、能被清楚拆解的基礎命令集合。
範例一:物件的表達方法
宣告式 Declarative
let man={
"name":"Bob",
"age":18
};
指令式 Imperative
let man=new Object();
man.name="Bob";
man.age=18;
範例二:使用者介面的表達方法
宣告式 Declarative
<a target="_blank" href="https://www.google.com/">Google</a>
指令式 Imperative
let link=document.createElement("a");
link.target="_blank";
link.href="https://www.google.com/";
link.textContent="Google";
範例三:資料處理的程序
宣告式 Declarative
let data=[2, 1, 5, 0];
data=data.map((value)=>(value*2));
console.log(data); // [4, 2, 10, 0]
指令式 Imperative
let data=[2, 1, 5, 0];
for(let i=0;i<data.length;i++){
data[i]=data[i]*2;
}
console.log(data); // [4, 2, 10, 0]
範例四:篩選資料的程序
宣告式 Declarative
let data=[2, 1, 5, 4];
let results=data.filter((value)=>(value>3));
console.log(results); // [5, 4]
指令式 Imperative
let data=[2, 1, 5, 4];
let results=[];
for(let i=0;i<data.length;i++){
if(data[i]>3){
results.push(data[i]);
}
}
console.log(results); // [5, 4]
以上說明供參考,彭彭不想在這裡下任何結論,歡迎大家留言給我,說說你的程式撰寫偏好 :)