實務上一定會遇到在不同 server ( development
、lab
、staging
與 production
) ,且各有各的 環境變數
,該如何設定這些環境變數並且自動切換呢 ?
點燈坊
在 Haskell 中的 variable 因為是 Immutable,所以算是 definition,負責程式碼中重複的部分;且有別於一般程式語言的是,由於 Haskell 將 function 也視為 data,因此 variable 也能是 function。
若使用 IIFE,則有另外一種使用 Lambda 方式。
ECMAScript 對 Asynchronous 總共有 Promise、Generator 與 Async Await 三種支援,其中 Generator 屬於較進階的應用,主要是在寫 library,但 Promise 與 Async Await 則非常重要,寫 application 也很常用到。
由於 JavaScript 是 Single Thread 語言,由於其 Single Thread 特色,對於繁重的運算動作,就無法如 C# 使用 Multi Thread 解決,因此 Asynchronous 在 JavaScript 格外重要。
Browser 使用獨特的 Event Loop Model 實現 Asynchronous,要能徹底了解其背後運作原理,才能掌握 JavaScript 的 Asynchronous。
ES5 很難寫大程式,主要是因為 JavaScript 沒有 Module 概念,常常一個檔案寫兩三千行程式,且大量使用 Global Variable 造成 Side Effect 很難維護。
早期 JavaScript 是使用 Module Pattern 解決,稍後更有 CommonJS 與 AMD 試圖制定 Module 標準,一直到 TC39 出手,在 ECMAScript 2015 定義 Module 後,JavaScript 的模組化總算塵埃落定,是 JavaScript 發展的重要里程碑。
LINQ 是 C# 3.0 實現 FP 重要里程碑,提供大量的 Operator,讓我們以 Pure Function 將 data 以 Dataflow 與 Pipeline 方式實現。本系列將先以 Imperative 實作,然後再重構成 FP,最後再重構成 LINQ Operator。
本文將討論 Select
Operator。
為了使 function 重複使用能力更高,我們會盡量將 function 寫成 composable function,也因為如此,function 之間不斷地建立 data,且每個 function 又必須各自執行 for
loop,這些都是執行效能殺手,而 Yield
與 Lazy Evaluation
讓我們優雅的解決這兩大難題。