| 程式人 | 林信良 | 程式學習 | Python | metaclass | 物件
Python與meta程式設計
在Python中,有許多方案可以從事meta程式設計,方案間可解決的需求看似還會重疊,只有仔細看清方案間的分野,才能以簡單明瞭的方式來實現需求!
2022-06-08
| 程式人 | 林信良 | 程式學習 | Python | 函式 | 類別 | 可呼叫物件
函式?類別?可呼叫物件!
Python的函式是一級公民,可接受/傳回函式是個極具威力的特性,想讓這個威力更進一步的話,可從接受/傳回可呼叫(callable)物件的方向來思考
2022-05-27
| 程式人 | 林信良 | 程式學習 | 波函數塌縮 | OpenSCAD
波函式塌縮與函數式
在本質上,波函式塌縮演算是變動的,而函數式典範的特性是不變,在看似衝突的兩者之間,如何尋找能兼顧效能的實作?
2022-05-25
| 程式人 | 林信良 | 程式學習 | 重構 | 效能最佳化
重構與效能
想調整效能?先增加可讀性!重構增加了可讀性,不過會使得效能下降?最佳化增加了效能,卻會導致程式難以理解?不是的!兩者其實是相輔相成!
2022-05-18
| 程式人 | 林信良 | 程式學習 | 雜湊 | Hash | 康托爾配對函式 | Cantor pairing function
淺談雜湊碼設計
基於雜湊的資料結構,基本上,是以空間換時間,Java的字串雜湊是多項式捲動雜湊,若要針對座標進行雜湊,我們可以從康托爾配對函式出發
2022-05-11
| 程式人 | 林信良 | 程式學習 | 童子軍規則 | The Boy Scout Rule | 無情重構 | 開放原始碼
Clean Code:童子軍規則
在原始碼上運用童子軍規則,又稱為無情重構,此種方式是指做這類重構時不需要設想太多,如果在離開前能讓原始碼乾淨一些,其實就可以了!
2022-05-05
| 程式人 | 林信良 | 程式學習 | 泛型 | Go語言 | Generics
Go參數多型?次型態多型?
Go 1.18提供泛型,這也意味著,現在Go有了參數多型與次型態多型的選擇,然而,兩者本質上相同,更像是兩個方向的權衡,此時就看開發者想選擇光譜的哪個位置!
2022-04-20
| 組合優於繼承 | record類別 | Java 17 | 繼承 | 程式人 | 林信良 | 程式學習
組合優於繼承?
使用支援物件導向的語言時,我們總會聽到「組合優於繼承」這個原則,然而,語言既然提供了繼承這項工具,繼承也並非一無是處
2022-04-07
| 程式人 | 林信良 | 程式學習 | Haskell | Monad
Haskell裡的不純粹
接觸純函數式的開發者,往往著重在如何撰寫純函式,然而若想以純函數式思考來解決現實的需求,對純函數式中非純粹部份的熟悉與掌控,絕對是必要的一環
2022-03-31
| Monoid | reduce | Haskell | 程式人 | 林信良 | 程式學習
從reduce認識Monoid
reduce的來源元素,需要有Monoid規範的結合律與恆等值,Monoid更接近純粹數學上的概念,是為了讓程式有更多的組合性
2022-03-24
| 程式人 | 林信良 | 程式學習 | Haskell | 型態類別 | 型態 | type
掌握Haskell型態類別
別從抽象的函式宣告理解Haskell型態類別!Haskell的型態類別並不是物件導向語言中的類別,也不是Java的interface或其他語言的類似物,它是觀察既有函式的重複、抽取重複後的行為規範!
2022-03-08
| 程式人 | 林信良 | 程式學習 | Haskell | 代數
從Haskell看代數資料型態
在Java領域,可能不知道「代數資料型態」這名詞,若從其他角度來認識record與sealed類別,多半也能掌握其應用方式;然而,如果可以的話,建議直接從Haskell認識代數資料型態的定義與應用
2022-03-02