jim yeh on 十一月 17th, 2016

延遲運算是宣告式語意中,用來對治複雜性的利器。假如我們要解決的問題,並沒辦法單獨每一元素以 item -> toResult(item) 的方式解決,而是每一個元素的計算都會和其它元素扯上關係,而且因應不同的情境,要傳入不同的演算策略的話,這時候就該脈絡物件上場

Continue reading about 宣告式語意的脈絡

     
jim yeh on 六月 19th, 2014

用以上這樣的模式來重構 legacy code,程式的意圖會很清楚地浮現出來,也會直接具體地關連到問題領域業務邏輯的語言,而不是一大串的 if-then-else 或是 for 迴圈的語法,這有助於不同觀點的相互溝通。你可以從主要流程中具體明白程式在做什麼,而如果需要瞭解實作的細節,則可以進一步去參考那些很簡單的物件化之小函式。由於不同關切點的分離,程式變得更簡單而且容易測試,對後續的程式維護甚至想要增加功能的需求來說,都會得到莫大的助益呀。

Continue reading about 清楚表達程式意圖的重構招式

     
jim yeh on 五月 14th, 2014

最近同人就碰到一個實例,讓我體會到以泛函編程(FP)典範增進功能的可測性。其實,以前遠在美國的 Perter Ho 就曾向包括同人在內的幾位點空間的朋友,分享過相同的觀念,而同人則是藉由最近的實例而對這樣的觀念有更深刻的體驗。

Continue reading about 以泛函編程增進功能的可測性

     
jim yeh on 四月 22nd, 2014

從〈查詢的宣告式語意〉提到的實作中,我們可以發現有關資料搜尋的一種設計抽象概念,可以用相同的模式應用在不同的資料結構上,例如從 XML 文件中搜尋特定的資料節點。同人曾經用過宣告式語意實作轉換期貨交易 Span 檔案,將 XML 資料格式轉換成某種特定格式的資料檔案,程式碼的寫法比傳統的命令式語意寫法更為精簡而直覺。

Continue reading about XML 格式轉換的宣告式語意

     
jim yeh on 一月 28th, 2014

本來第二篇打算要寫剖析命令列的宣告式語意,不過同人覺得我原先的設計還不夠好,於是就暫時先把它擱置下來。結果一擱就擱了好久,慢慢地也讓我覺得沒有必要重新實作命令剖析列的宣告式語意,因為畢竟會使用到的機會並不多。其實命令列剖析的宣告式語意和前一篇文章的設計原理應該是一致的,因此同人後來決定要跳過它。剛好近看到有朋友討論相關的議題,激發我完成系列文章的動力,這一篇所要探討的主題正是有關於查詢的宣告式語意。

Continue reading about 查詢的宣告式語意

     
jim yeh on 八月 27th, 2013

一般而言,程式碼的立即運算是比較符合人們想法直覺的演算法,也就是依據上一個運算的結果來決定後續的演算邏輯。但對較複雜的程式邏輯而言,立即運算常會形成多重運算路徑的歧路而使程式的開發與維護變得更繁複,面對這種狀況也許我們需要採用另一種典範來簡化設計;也就是延後運算的處理,等到需要得到答案時才一次求解計算出結果,省卻許多繁複的條件判斷或迴圈的控制。在這裡同人想發表一系列文章分享四種不同主題延遲運算,它們都是以 C++ 語言實作的延遲運算,包括訊息拆解與組合、拆解命令列、資料表的查詢、以及搜尋 Xml 找到符合的資料。

首先,這一篇文章我們先來談談延遲運算在訊息拆解與組合的應用。

Continue reading about 訊息拆解組合的宣告式語意