-
同人,喜愛思考、閱讀、探求真理以滋長心靈,以本網誌記錄生活體驗上的所思所言。 2024 年 11 月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 網誌資訊
文章彙整
- 2023 年 3 月 (5)
- 2023 年 2 月 (3)
- 2020 年 8 月 (1)
- 2020 年 7 月 (2)
- 2020 年 6 月 (4)
- 2020 年 5 月 (6)
- 2020 年 4 月 (2)
- 2020 年 3 月 (1)
- 2017 年 11 月 (2)
- 2017 年 7 月 (3)
- 2017 年 5 月 (2)
- 2017 年 1 月 (6)
- 2016 年 11 月 (1)
- 2016 年 2 月 (2)
- 2016 年 1 月 (1)
- 2015 年 12 月 (2)
- 2015 年 11 月 (6)
- 2015 年 10 月 (8)
- 2015 年 9 月 (6)
- 2015 年 8 月 (4)
- 2015 年 7 月 (9)
- 2015 年 6 月 (1)
- 2015 年 5 月 (1)
- 2015 年 4 月 (1)
- 2015 年 3 月 (2)
- 2015 年 2 月 (3)
- 2015 年 1 月 (1)
- 2014 年 9 月 (1)
- 2014 年 6 月 (1)
- 2014 年 5 月 (1)
- 2014 年 4 月 (1)
- 2014 年 3 月 (1)
- 2014 年 1 月 (3)
- 2013 年 12 月 (1)
- 2013 年 10 月 (1)
- 2013 年 9 月 (2)
- 2013 年 8 月 (1)
- 2013 年 4 月 (2)
- 2013 年 3 月 (1)
- 2013 年 2 月 (2)
- 2013 年 1 月 (1)
- 2012 年 12 月 (3)
- 2012 年 11 月 (3)
- 2012 年 10 月 (5)
- 2012 年 9 月 (2)
- 2012 年 8 月 (2)
- 2012 年 7 月 (6)
- 2012 年 6 月 (2)
- 2012 年 5 月 (6)
- 2012 年 4 月 (3)
- 2012 年 3 月 (1)
- 2012 年 1 月 (2)
- 2011 年 12 月 (1)
- 2011 年 11 月 (2)
- 2011 年 10 月 (1)
- 2011 年 9 月 (1)
- 2011 年 8 月 (3)
- 2011 年 7 月 (3)
- 2011 年 6 月 (2)
- 2011 年 5 月 (2)
- 2011 年 4 月 (2)
- 2011 年 3 月 (2)
- 2011 年 2 月 (4)
- 2011 年 1 月 (3)
- 2010 年 12 月 (2)
- 2010 年 11 月 (5)
- 2010 年 10 月 (2)
- 2010 年 9 月 (7)
- 2010 年 8 月 (5)
- 2010 年 7 月 (6)
- 2010 年 6 月 (4)
- 2010 年 5 月 (1)
- 2010 年 4 月 (6)
- 2010 年 3 月 (3)
- 2010 年 2 月 (2)
- 2010 年 1 月 (5)
- 2009 年 12 月 (6)
- 2009 年 11 月 (2)
- 2009 年 10 月 (5)
- 2009 年 9 月 (6)
- 2009 年 8 月 (6)
- 2009 年 7 月 (6)
- 2009 年 6 月 (4)
- 2009 年 5 月 (3)
- 2009 年 4 月 (3)
- 2009 年 3 月 (4)
- 2009 年 2 月 (5)
- 2009 年 1 月 (8)
- 2008 年 12 月 (7)
- 2008 年 11 月 (7)
- 2008 年 10 月 (10)
- 2008 年 9 月 (5)
- 2008 年 8 月 (9)
- 2008 年 7 月 (6)
- 2008 年 6 月 (3)
- 2008 年 5 月 (4)
- 2008 年 4 月 (10)
- 2008 年 3 月 (6)
- 2008 年 2 月 (7)
- 2008 年 1 月 (10)
- 2007 年 12 月 (10)
- 2007 年 11 月 (7)
- 2007 年 10 月 (9)
- 2007 年 9 月 (18)
- 2007 年 8 月 (12)
- 2007 年 7 月 (14)
- 2007 年 6 月 (8)
- 2007 年 5 月 (16)
- 2007 年 4 月 (19)
- 2007 年 3 月 (16)
- 2007 年 2 月 (7)
- 2007 年 1 月 (7)
- 2006 年 12 月 (3)
- 2006 年 11 月 (4)
- 2006 年 5 月 (1)
- 2006 年 4 月 (2)
- 2006 年 3 月 (3)
- 2006 年 2 月 (2)
- 2006 年 1 月 (4)
文章分類
-
最新文章
目前星體位置
最新迴響
- 「「星座統計學:揭秘你與他人的星座相容性」 - starday.cc」於〈星座專家不告訴你的占星知識—星座不是統計學〉發佈留言
- 「開始學占星後我不再批判任何人了 |占星學的三大勢力 |占星如何自學 |【學占星的人命不好】 - 港台免費玄學網」於〈占星學的三大勢力(下)〉發佈留言
- 「YJ」於〈早餐店內的語意瞹眛〉發佈留言
- 「幫幫我」於〈從海砂屋陰影學到的教訓〉發佈留言
- 「英雄悲歌 | 同人的生活派對」於〈黃道十二星座的原型〉發佈留言
- 「焦油坑 | 同人的生活派對」於〈如何在系統失敗前發現錯誤〉發佈留言
- 「jim yeh」於〈不要把 TDD 和做測試混為一談〉發佈留言
- 「ICO」於〈不要把 TDD 和做測試混為一談〉發佈留言
- 「星座專家不告訴你的占星知識—萬惡淫為首 « 同人的生活派對」於〈星座專家不告訴你的占星知識—命、緣、輪迴〉發佈留言
- 「星座專家不告訴你的占星知識—命、緣、輪迴 « 同人的生活派對」於〈星座專家不告訴你的占星知識—星座運勢為什麼只看太陽星座〉發佈留言
網路資源
IT 網站鏈結
其它鏈結
親友網誌鏈結
管理界面
分類彙整: 編程技巧
宣告式語意的脈絡
延遲運算是宣告式語意中,用來對治複雜性的利器。假如我們要解決的問題,並沒辦法單獨每一元素以 item -> toResult(item) 的方式解決,而是每一個元素的計算都會和其它元素扯上關係,而且因應不同的情境,要傳入不同的演算策略的話,這時候就該脈絡物件上場 閱讀全文
更簡單的條件查詢設計
一般來說,程式可以寫成一連串或是巢狀的 if 敍述,那就代表程式流程可以用狀態變數來表示,也就是可以表示成有限狀態機的形式,可以用 interpreter 或是 state pattern 來解決甚至是用表格檢索的方式來表現。但我們一般都不會遇到需要那麼複雜的情況,主要是因為那是框架需要解決的問題,比如說程式語言的 Compiler 或是如 Hibernate 的 HQL、JPA 的 JPQL。 對其它我們會碰到沒那麼複雜的情況,同人的經驗顯示有二種不同解決方式:第一種就是上一篇流程元件化提到的應用 builder pattern 或是更早提到訊息拆解組合應用 visitor pattern,建立一個解決問題過程的 context 脈絡,把答案組合出來,有時候問題比較簡單時,也可能只需要像本篇文章提到只需要應用 strategy pattern 就可以了、另一種方式則是利用泛函編程的高階函式,建構出解決問題的表示式,然後再讓函式一層層套疊的方式來求解,同人不久前分享的語言整合查詢就是這種解法的代表。 閱讀全文
以延遲運算實現流程模組化
從以上以延遲運算實現流程模組化讓我們看到,這個設計樣式和同人先前分享過的語言整合查詢有一些不一樣的地方。語言整合查詢是運用表示式的套疊運算的原理;而這個設計則是引用 Context 的概念,讓各個流程模組元件可以存取並分享處理過程中的資料變化,並且運用 Exception Handler 的機制,來達到流程控制的一致性。 閱讀全文
用 Java 實作語言整合查詢功能
語言整合查詢(LINQ)是非常有用的設計概念,它扭轉我們過去用指令式編程的習慣, … 閱讀全文
清楚表達程式意圖的重構招式
用以上這樣的模式來重構 legacy code,程式的意圖會很清楚地浮現出來,也會直接具體地關連到問題領域業務邏輯的語言,而不是一大串的 if-then-else 或是 for 迴圈的語法,這有助於不同觀點的相互溝通。你可以從主要流程中具體明白程式在做什麼,而如果需要瞭解實作的細節,則可以進一步去參考那些很簡單的物件化之小函式。由於不同關切點的分離,程式變得更簡單而且容易測試,對後續的程式維護甚至想要增加功能的需求來說,都會得到莫大的助益呀。 閱讀全文
以泛函編程增進功能的可測性
最近同人就碰到一個實例,讓我體會到以泛函編程(FP)典範增進功能的可測性。其實,以前遠在美國的 Perter Ho 就曾向包括同人在內的幾位點空間的朋友,分享過相同的觀念,而同人則是藉由最近的實例而對這樣的觀念有更深刻的體驗。 閱讀全文
XML 格式轉換的宣告式語意
從〈查詢的宣告式語意〉提到的實作中,我們可以發現有關資料搜尋的一種設計抽象概念,可以用相同的模式應用在不同的資料結構上,例如從 XML 文件中搜尋特定的資料節點。同人曾經用過宣告式語意實作轉換期貨交易 Span 檔案,將 XML 資料格式轉換成某種特定格式的資料檔案,程式碼的寫法比傳統的命令式語意寫法更為精簡而直覺。 閱讀全文
查詢的宣告式語意
本來第二篇打算要寫剖析命令列的宣告式語意,不過同人覺得我原先的設計還不夠好,於是就暫時先把它擱置下來。結果一擱就擱了好久,慢慢地也讓我覺得沒有必要重新實作命令剖析列的宣告式語意,因為畢竟會使用到的機會並不多。其實命令列剖析的宣告式語意和前一篇文章的設計原理應該是一致的,因此同人後來決定要跳過它。剛好近看到有朋友討論相關的議題,激發我完成系列文章的動力,這一篇所要探討的主題正是有關於查詢的宣告式語意。 閱讀全文
訊息拆解組合的宣告式語意
一般而言,程式碼的立即運算是比較符合人們想法直覺的演算法,也就是依據上一個運算的結果來決定後續的演算邏輯。但對較複雜的程式邏輯而言,立即運算常會形成多重運算路徑的歧路而使程式的開發與維護變得更繁複,面對這種狀況也許我們需要採用另一種典範來簡化設計;也就是延後運算的處理,等到需要得到答案時才一次求解計算出結果,省卻許多繁複的條件判斷或迴圈的控制。在這裡同人想發表一系列文章分享四種不同主題延遲運算,它們都是以 C++ 語言實作的延遲運算,包括訊息拆解與組合、拆解命令列、資料表的查詢、以及搜尋 Xml 找到符合的資料。
首先,這一篇文章我們先來談談延遲運算在訊息拆解與組合的應用。 閱讀全文