有顏色的函式不是壞事

閱讀時間約 2 分鐘

What Color is Your Function? 一文中

Async function 被比喻成「紅色函式」

紅色函式不能在普通的函式裡(即「藍色函式」)使用

因此紅色具有感染性

定義函式之前必須先決定是否要染成紅色

作者不喜歡這種麻煩的規則

但我認為這種麻煩是有道理的


並不是只有Async function具有這種特性

其他像是:

Java的throw catch語法

rust的unsafe function

PureScript的partial function

Haskell的IO Monad

c++的non-const function

它們都具有感染性

它們的顏色代表了它們所關注的特性

Java強化傳統的例外處理機制

使錯誤變得可預期

rust在意記憶體安全

並使用unsafe在語法上明確地說明這一點

Haskell對於pure(referential transparency)的要求很嚴格

side effect必須以Monad的形式標註於型別上

Haskell因為歷史因素在totality上有很大的問題

而PureScript用Partial class修復了這個的問題

c++的non-const function只能在non-const function裡和non-const variable呼叫

使得const保證物件不會被修改


感染性使問題得以從根源(callee)傳播到你面前(caller)

這些都是在編譯時期完成的

因此開發者得以解放部分的專注力

把精力與時間花在真正的程式邏輯上

感染性使得這個特性使用起來會比較麻煩

這是因為他把原本被忽略被隱藏的特性顯現出來

rust的unsafe揭示了原本在c++習以為常但危險的操作

PureScript的partial也是如此

它們同時也建議使用者盡量把紅色函式抽離出來

而不是全部攪和在一起

rust本身的設計就是希望安全的程式碼應該好寫

不安全的程式碼仍然可能但不容易寫

Haskell的IO雖然是因為純函數式設計的問題才出現的

但同時也提供了「分離輸入輸出與計算邏輯」的思考方式


總結來說感染性使用的好是會給開發者帶來好處的

但像是c++的const就是使用的很差的例子

具有感染性的其實是non-const

但開發者常常在宣告函式時沒有正確的使用const

這使得const用起來很不方便

常常需要手動const_cast

相較之下rust的mut就非常地完美

更糟的例子是當有兩套一樣的函式但有兩種顏色時

我們就必須選邊站

Async function就是這種情況

另外類似的還有OOP的encapsulation

OOP把封裝限定在資料型別上

要使用封裝的函式只能繼承自該類別

這使得「少用繼承多用組合」變得難以實現

物件導向因此變得具有感染性(在壞的意義上)

4會員
28Content count
這不是教你如何從物件導向到函數式編程的入門教程。我會深入探討物件導向與函數式編程的差異,並討論為什麼你應該使用函數式編程並徹底放棄物件導向。
留言0
查看全部
發表第一個留言支持創作者!
have bear的沙龍 的其他內容
'方格子在 linux/firefox 上的 bug 超煩 '若在每行第一句打中文會被吃掉 'Ctrl+V還會複製貼上之後的文字貼上之後的文字
'方格子在 linux/firefox 上的 bug 超煩 '若在每行第一句打中文會被吃掉 'Ctrl+V還會複製貼上之後的文字貼上之後的文字
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
聯覺(synesthesia)是一種非常特殊的感知現象,當一個感官受到刺激時,會直接觸發其他感官的反應,就好像感官之間建立了神奇的聯繫。當人們聽到特定的音樂時,可能會聯想到某種顏色,例如,聽到高音調的音樂可能會讓人聯想到明亮的黃色,而聽到低音調的音樂可能會讓人聯想到深沉的藍色。
Thumbnail
也許一部愛情童話故事不只是純純的愛情故事,更多是追求愛情的心理過程和文化衝突的呈現。
Thumbnail
可能包含敏感內容
================================= 主角和各房介紹: 主 角  = 超級女運和強運,有色無膽的有錢大好人(?) 天然呆  = 大房,黑色眼鏡女,迷糊偽蘿,呆呆向前衝(咦?) 艾莉絲  = 二房,可愛貼心萌萌蘿,俄羅斯金絲貓,擁有讀心能力 小夏美  = 三房,聰明獨立堅
Thumbnail
我們的答案:鹽有不同顏色不是因為加了色素。鹽加碘是為了解決碘營養不足的問題。
Thumbnail
當我們去買蛋時,主要都會看到賣白殼和棕殼的蛋,我們可以發現,棕殼蛋上的顏色深淺並非都接近一致,會有明顯的差異,有些顏色較深,有些顏色較淺,有的甚至會有顆粒物在上面。在本次內容中主要就是跟大家探討究竟是捨麼因素影響蛋殼的顏色。
Thumbnail
「你真是個不可思議的人, 明明可以聰明的生活下去, 卻選擇了不確定的未來。」
【ランドセル人気の色に異変!? あの映画の影響で…】 #0002 大手スーパーのイオンは、来年春に入学する新1年生に向けてランドセル約280種類を取りそろえた予約販売会を実施しています。 パープルはここ数年、人気が上昇していて、「アナと雪の女王」などディズニー映画の影響とみられています。 ランドセル
Thumbnail
動畫導演用筆創作,實寫導演則是透過鏡頭與場景、人物造型、光線的安排,在真實世界裡創造帶有故事性、情緒性,甚至象徵意義的色調。「顏色是有魔法的!每個人對色彩的認知都不一樣,你的紅色不一定是我的紅色,你的黃色可能比我還亮很多——甚至,誰能夠說清楚『青色』到底是什麼東西?(笑)」
Thumbnail
<p>陪著小孩做完這個「教案」,我想著一個問題──教案的目的到底是什麼呢?如果教案的目的是設計出一套活動方法,希望小孩照著做之後能夠做出成品,那麼我這個教案是不合格的;可是,如果將教案視為帶小孩進行某種體驗的方法,那麼這個教案或許可以說是成功的。</p>
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
聯覺(synesthesia)是一種非常特殊的感知現象,當一個感官受到刺激時,會直接觸發其他感官的反應,就好像感官之間建立了神奇的聯繫。當人們聽到特定的音樂時,可能會聯想到某種顏色,例如,聽到高音調的音樂可能會讓人聯想到明亮的黃色,而聽到低音調的音樂可能會讓人聯想到深沉的藍色。
Thumbnail
也許一部愛情童話故事不只是純純的愛情故事,更多是追求愛情的心理過程和文化衝突的呈現。
Thumbnail
可能包含敏感內容
================================= 主角和各房介紹: 主 角  = 超級女運和強運,有色無膽的有錢大好人(?) 天然呆  = 大房,黑色眼鏡女,迷糊偽蘿,呆呆向前衝(咦?) 艾莉絲  = 二房,可愛貼心萌萌蘿,俄羅斯金絲貓,擁有讀心能力 小夏美  = 三房,聰明獨立堅
Thumbnail
我們的答案:鹽有不同顏色不是因為加了色素。鹽加碘是為了解決碘營養不足的問題。
Thumbnail
當我們去買蛋時,主要都會看到賣白殼和棕殼的蛋,我們可以發現,棕殼蛋上的顏色深淺並非都接近一致,會有明顯的差異,有些顏色較深,有些顏色較淺,有的甚至會有顆粒物在上面。在本次內容中主要就是跟大家探討究竟是捨麼因素影響蛋殼的顏色。
Thumbnail
「你真是個不可思議的人, 明明可以聰明的生活下去, 卻選擇了不確定的未來。」
【ランドセル人気の色に異変!? あの映画の影響で…】 #0002 大手スーパーのイオンは、来年春に入学する新1年生に向けてランドセル約280種類を取りそろえた予約販売会を実施しています。 パープルはここ数年、人気が上昇していて、「アナと雪の女王」などディズニー映画の影響とみられています。 ランドセル
Thumbnail
動畫導演用筆創作,實寫導演則是透過鏡頭與場景、人物造型、光線的安排,在真實世界裡創造帶有故事性、情緒性,甚至象徵意義的色調。「顏色是有魔法的!每個人對色彩的認知都不一樣,你的紅色不一定是我的紅色,你的黃色可能比我還亮很多——甚至,誰能夠說清楚『青色』到底是什麼東西?(笑)」
Thumbnail
<p>陪著小孩做完這個「教案」,我想著一個問題──教案的目的到底是什麼呢?如果教案的目的是設計出一套活動方法,希望小孩照著做之後能夠做出成品,那麼我這個教案是不合格的;可是,如果將教案視為帶小孩進行某種體驗的方法,那麼這個教案或許可以說是成功的。</p>