| 程式人 | 林信良 | 程式學習 | 雜湊 | 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

| 程式人 | 林信良 | 程式學習 | 球面Voronoi | 程式碼 | 3D模型 | 極點投影 | 演算法

從無到有實現球面Voronoi

最近我用程式寫出了一顆平凡無奇的哈密瓜,如果你曾經思考過Voronoi的問題,應該會注意到我想傳達的重點,其實是球面Voronoi紋理的實現

2022-02-16

| 圖靈紋 | Turing pattern | 反應擴散系統 | Gray-Scott模型 | 程式人 | 林信良 | 程式學習

淺談反應擴散系統

關於熱帶魚身上花紋、花豹的斑點、乳牛的黑白斑塊,如何以程式碼實現出這些圖樣呢?令人意外地,需要的數學並不複雜,結合程式碼實作只要短短幾行,就能模擬出自然界許多的紋路樣貌!

2022-02-03

| 程式人 | 林信良 | 程式學習 | 生命遊戲 | State | Rule | 狀態模式

生命遊戲與狀態模式

生命遊戲涉及細胞的生存狀態,若想以物件導向方式實作,觀察既有程式碼,識別出提取規則用的狀態,會是以狀態模式為思考方向時的重點!

2022-01-27

| 程式人 | 林信良 | 程式學習 | 模式

模式是語言缺陷?

關於模式是語言缺陷的說法太過單純,模式誕生於規律性,而規律性來自於重複,別忘了運算的本質就是重複,運算的本質就是模式!

2022-01-20