Monad 是函數式程式設計中的一個強大概念,有助於管理副作用並維護乾淨、可組合的程式碼。
在這篇文章中,我們將使用 JavaScript 探索 Maybe monad 設計模式,該模式用於處理可能失敗或傳回 null/undefined 的操作。
簡單來說,monad 是一種設計模式,可讓您以一致的方式包裝值、鍊式操作和處理副作用。
Maybe monad 對於處理 null 或未定義的值特別有用,而不會在程式碼中進行 null 檢查。
此 monad 將包裝一個值,並提供將函數應用於該值(如果存在)的方法。
// Maybe Monad Implementation class Maybe { constructor(value) { this.value = value; } static of(value) { return new Maybe(value); } isNothing() { return this.value === null || this.value === undefined; } map(fn) { return this.isNothing() ? Maybe.of(null) : Maybe.of(fn(this.value)); } getOrElse(defaultValue) { return this.isNothing() ? defaultValue : this.value; } }
讓我們考慮一個執行除法但需要處理除零的函數。
const safeDivide = (numerator, denominator) => { return denominator === 0 ? Maybe.of(null) : Maybe.of(numerator / denominator); }; const result = Maybe.of(10) .map(x => x * 2) // 20 .map(x => x 1) // 21 .map(x => safeDivide(x, 0)) // Maybe(null) .getOrElse('Division by zero'); console.log(result); // Output: Division by zero
Maybe monad 包裝每個中間值,僅當該值不為 null 或未定義時才套用轉換。
safeDivide 函數傳回 Maybe monad,確保安全處理除零。
Maybe monad 是一個強大的工具,用於管理 JavaScript 中的 null 或未定義值。透過將值包裝在 monad 中,您可以安全地連結操作並維護更乾淨、更可讀的程式碼。這種簡單的 monad 方法可以大大增強 JavaScript 中的函數式程式設計工具包。
有關更多技術見解和實踐教程,請訪問 rmauro.dev。快樂編碼!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3