iT邦幫忙

2022 iThome 鐵人賽

DAY 12
1
Modern Web

致 JavaScript 開發者的 Functional Programming 新手指南系列 第 12

Day 12 :何謂 Immutable Data?(4):結語

  • 分享至 

  • xImage
  •  

在先前的章節中,我們認真地探討了有關 JavaScript 有關記憶體傳值、傳參考的核心概念,其會依據我們操作物件的手法不同,而導致資料會出現 Mutable 與 Immutable 的差異。

在 FP 的設計模式中,我們使用 Immutable Data 的原因有很多,例如:避免開發者可以直接針對物件的參考物件直接操作,而產生預期外的副作用(Side Effect)。

除了避免 JavaScript 傳參考的特性外,同時也是為了要加強撰寫 JavaScript 的嚴謹性,就如前面章節所提到,JavaScript 除了是一門高階語言,更是一個弱型別語言,可能會因為型別的問題,或是屬性不存在而導致報錯,進而導致中斷程式碼的執行而產生生錯誤。

使用 Immutable Data 作為參數帶入函式,或是針對 Immutable Data 進行操作,可以掌握資料間的狀態互相獨立,確保服務中的元件不會因此互相影響。

在此我們簡單複習一下在這幾個小節中所理解到的概念:

重點整理:

  • JavaScript 中基本型別與物件儲存變數的機制不同,前者仰賴傳值(Call By Value),後者仰賴傳參考(Call By Reference ),又稱傳共享(Call By Sharing)。
  • JavaScript 中只有物件帶有 Mutable 的特性,基本型別並不帶有這項特性。
  • 在 JavaScript 中,不能被直接操作、改動結構的物件資料稱為 Immutable Data。
  • 為了補足 JavaScript 物件 Mutable 的特性,我們會使用淺拷貝或是深拷貝來複製我們所需要的物件資料。
  • 我們可以透過展開運算子來協助我們展開物件、陣列,並達到淺拷貝的作用。
  • 我們可以透過其餘參數,篩選出我們欲刪除或是想保留的物件屬性。
  • 陣列方法像是 poppushsliceshiftunshiftreversesort 等方法,都會直接對物件中的參考物件進行修改,屬於 Mutable 方法。
  • 在不產生副作用的狀況下,mapfilter 是很好的 Immutable 陣列方法,可以在不影響原陣列的狀況下,回傳一組新的陣列。
  • 我們在不仰賴 Mutable 陣列方法的狀況下,可以透過 mapfilter 對陣列進行更新、修改及刪除的動作。

到這個章節,JavaScript 核心及 Immutable Data 概念告一個段落,在下一個章節中我們要來聊聊什麼是純函式(Pure Function)!我們下個章節見啦。

參考資料:

  1. What is Immutable Data?

上一篇
Day 11 :何謂 Immutable Data?(3):更新陣列
下一篇
Day 13:什麼是純函式 ?(1):單輸入單輸出
系列文
致 JavaScript 開發者的 Functional Programming 新手指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言