iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0

我的心、我這一生都在追求一個東西:一個無以名狀的東西。

André Breton

前言

某種程度上,Javascript ES6(JS)提供了一種多典範多風格的彈性(multi-paradigm, multi-style),簡直是「一個語言,各自表訴」。這種彈性創造了分歧,這種分歧創造了討論,討論創造爭議,爭議創造流量密碼。這或許就是JS的魅力之一。

你跑來問我「我到底該信/遵循哪個style?」或「哪個style才能讓我升職加薪?」,我的答案千篇一律:你自己決定。多麽令人討厭的回答啊!

後來,你跑去問我老闆,他絕對會告訴你Functional Programming (FP),因為很受歡迎啊!(請容我將style/programming混為一談)

好吧,趨之若鶩總比特立獨行來得更有安全感。但這理由也太爛了吧!

我不想逼你愛上FP,但他有些特別的點你可能覺得迷人,或是更討厭...。

信仰之決:命令與宣告

到目前為止,JS最常見的style不外乎object-oriented或funtional,前者遵循命令式典範imperative paradigm,後者則恪守宣告式典範declarative paradigm。這兩類的差異如下:

命令式典範 Imperative Paradigm

如果你是母語是C++或Java,你大概把命令式典範刻在骨子裡了。命令式典範著重HOW,也就是你為了達成目標,精耕細作了每一步驟,一步一步都可能改變狀態。顯而易見,在命令式典範中,是狀態依賴的(stateful),不斷改變狀態的(not immutable)。

// 可能會被FP老闆討厭的寫法
// imperative paradigm
function addOneAll(lst) {
    for (let i = 0; i < lst.length; i++) {
        lst[i] += 1;
    }
};

const lstOfOddNumbers = [1, 3, 5, 7, 9];
addOneAll(lstOfOddNumbers);
console.log(lstOfOddNumbers); //[2, 4, 6, 8, 10]

宣告式典範 Declarative Paradigm

宣告式典範著重What,也就是目標本身是什麼。宣告式典範中過程不再重要,只要不要改變到狀態就好。

// 較不會被FP老闆討厭的寫法
// declarative paradigm
const lstOfOddNumbers = [1, 3, 5, 7, 9];
const addedOddNumbers = lstOfOddNumbers.map(n => n+1);
console.log(addedOddNumbers); //[2, 4, 6, 8, 10]

未完待續...


上一篇
行前通知
下一篇
摯友:Array(1/2)
系列文
被討厭的前端實務手冊|JS x TS x React18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言