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