論壇首頁
-> IT人生
繼續轉貼: 為什麼說面向對象編程和函數式編程都有問題 (發表於10年前)
分頁: 1 , 2 下一頁
閱讀上一個主題 :: 閱讀下一個主題
作者
正文
webdriver (只看此人 )
時間: 2014-10-17 12:51
函數式編程 FP - Functional Programming 最近有升溫的趨勢啊
那就轉幾篇文章看看咯
_________________There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
樓主 |
電梯直達
webdriver (只看此人 )
時間: 2014-10-17 12:51
我不理解為什麼人們會對面向對象編程和函數式編程做無休無止的爭論。就好象這類問題已經超越了人類智力極限,所以你可以幾個世紀的這樣討論下去。經過這些年對編程語言的研究,我已經清楚的看到了問題的答案,所以,我經常的發現,人們對這些問題做的都是一些抓不住要領、無意義的爭論。
簡言之,不論是面向對象編程還是函數式編程,如果你走了極端,那都是錯誤的。面向對象編程的極端是一切都是對象(純面向對象)。函數式編程的極端是純函數式編程語言。
_________________There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
沙發 |
返回頂端
webdriver (只看此人 )
時間: 2014-10-17 12:52
面向對象編程的問題
面向對象的問題在於它對“對象”的定義,它試圖將所有事情就納入到這個概念裡。這種做法極端化後,你就得出來一個一切皆為對象思想。但這種思想是錯誤的,因為
有些東西不是對象。函數就不是對象。
也許你會反駁,在Python和Scala語言裡,函數也是對象。在Python中,所有的含有一個叫做__call__的方法的對象其實都是函數。類似的,在Scala語言裡,函數是擁有一個叫做apply方法的對象。但是,經過認真的思考後,你會發現,它混淆了源祖和衍生物的概念。函數是源祖,包含函數的對象實際是衍生物。__call__和apply它們自身首先就是要定義的所謂“函數對象”。Python和Scala實際上是綁架了函數,把它們監禁在“對象”裡,然後打上“__call__” 和 “apply” 標簽,把它們稱作“方法”。當然,如果你把一個函數封裝到對象裡,你可以像使用一個函數那樣使用對象,但這並不意味著你可以說”函數也是對象“。
大多數的面向對象語言裡都缺乏正確的實現一等(first-class)函數的機制。Java語言是一個極致,它完全不允許將函數當作數據來傳遞。你可以將全部的函數都封裝進對象,然後稱它們為“方法”,但就像我說的,這是綁架。缺乏一等函數是為什麼Java裡需要這麼多“設計模式”的主要原因。一旦有了一等函數,你將不再需要大部分的這些設計模式。
_________________There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
板凳 |
返回頂端
webdriver (只看此人 )
時間: 2014-10-17 12:52
函數式編程的問題
相似的,函數式編程走向極端、成為一種純函數式編程語言後,也是有問題的。為了討論這個問題,我們最好先理解一下什麼是純函數式編程語言。出於這個目的,你可能需要閱讀一下Amr Sabry先生(他是我的博士導師)的What is a Purely Functional Language。概述一下就是,純函數式編程語言是錯誤的,因為
有些東西不是純的。副作用是真實存在的。
所謂純函數,基本上就是忽略了物質基礎(硅片、晶體等)表現的特性。純函數式的編程語言試圖通過函數——在函數中傳入傳出整個宇宙——來重新實現整個宇宙。但物理的和模擬的是有區別的。“副作用”是物理的。它們真實的存在於自然界中,對計算機的效用的實現起著不可或缺的作用。利用純函數來模擬它們是注定低效的、復雜的、甚至是丑陋的。你是否發現,在C語言裡實現一個環形數據結構或隨機數發生器是多麼的簡單?但使用Haskell語言就不是這樣了。
還有,純函數編程語言會帶來巨大的認知成本。如果你深入觀察它們,你會看到monads使程序變得復雜,難於編寫,而且monad的變體都是拙劣的修改。monads跟Java的“設計模式”具有相同的精神本質。使用monad來表現副作用就像是visitor模式來寫解釋器。你是否發現,在很多其它語言裡很簡單的事情,放到Haskell語言就變成了一個課題來研究如何實現?你是否經常會看到一些有著諸如“用Monadic的方式解決一個已經解決的問題”這樣標題的論文?有趣的是,Amr Sabry先生一起合著了這樣一篇論文。他試圖用Haskell語言重新實現Dan Friedman的miniKanren,但他不知道如何構造這些monads。他向Oleg Kiselyov——公認的世界上對Haskell類型系統知識最淵博的人——求教。而且你可能不知道,Amr Sabry先生應該是世界上對純函數編程語言知識最淵博的人了。他們在 Oleg 的幫助下解決了疑難後一起合著了這篇論文。諷刺的是,Dan Friedman——這個程序的原作者——在使用Scheme語言開發時卻沒有遇到任何問題。我在Dan的代碼基礎上重新實現了miniKanren,增加了一個復雜的負操作。為了實現這個,我需要使用約束式邏輯編程和其它一些高級的技巧。鑒於用Haskell語言重寫基本的miniKanren將兩位世界級程序員都難倒了的事實,我不敢想象如果用Haskell的monads如何能實現這些。
有些人認為monads的價值在於,它們“圈定”了副作用的范圍。但如果monads不能真正的使程序變得易於分析或更安全,這種“圈定”有什麼用呢?事實上就是沒用處。本身就跟副作用一樣難於分析理解。沒有一種東西可以說monads能使其簡單而靜態分析辦不到的。所有的靜態分析研究者都知道這點。靜態分析利用了monads的本質,但卻去除了程序員編寫monads代碼的負擔——而不是增加負擔。當然,過度的副作用會使程序很難分析,但你也可以使用C語言寫出純函數,例如:
int f(int x) {
int y = 0;
int z = 0;
y = 2 * x;
z = y + 1;
return z / 3;
}
你用匯編語言也能做到這些。純函數並不專屬於純函數式編程語言。你可以用任何語言寫出純函數,但重要的是,你必須也應該允許副作用的存在。
回首歷史,你會發現,數學上的理想主義是純函數編程語言的背後推動力。數學函數簡單漂亮,但不幸的是,它們只是在你構建原始純粹的模型時才好用。否者它們會變得很丑陋。不要被“范疇論”等標語嚇倒。我對范疇論了解很多。即使是范疇理論學家自己也稱其為“抽象無意義”,因為它們基本上就是用一種怪誕的方式告訴你一些你已經知道的事情!如果你讀過Gottlob Frege的文章Function and concept,你會吃驚的發現,在他的這篇論文前的大多數數學家都錯誤的理解了函數,而這僅僅是剛剛100多年前的事。事實上,數學語言上的很多事情都是有問題的。特別是微積分方面。編程語言的設計者們沒有理由要盲目的學習數學界。
_________________There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
地板 |
返回頂端
webdriver (只看此人 )
時間: 2014-10-17 12:52
不要盲目的愛上你的模型
無論任何事情,當走向極端時都是有害的。極端化時,面向對象編程和函數式編程都試圖把整個世界裝入它們的特有模型中,但這個世界是在完全不依賴我們的大腦思考的情況下運轉的。如果以為你有一個錘子,就把所有東西都當成釘子,這明顯是不對的。只有通過認清我們的真實世界,才能擺脫信仰對我們的束縛。
不要讓世界適應你的模型。讓你的模型適應世界。
(完)
_________________There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
5 樓 |
返回頂端
deerlake (只看此人 )
時間: 2014-10-17 13:12
函數式是基本,無論面向對象編程和函數式編程,到了機器碼都是函數式。
6 樓 |
返回頂端
dwen999 (只看此人 )
7 樓 |
返回頂端
名震一方 (只看此人 )
時間: 2014-10-17 13:21
Nerd
_________________ |Pxz-Pzy| ≤ 1 + Pxy
Why is 6 so sad?
8 樓 |
返回頂端
webdriver (只看此人 )
時間: 2014-10-17 13:49
新手入門,歡迎評論
_________________There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
9 樓 |
返回頂端
hairinwind (只看此人 )
時間: 2014-10-17 13:54
應該翻譯成 函數式編程 嗎???
我怎麼覺得是 面向功能的編程
原來那個是 面向對象的編程
10 樓 |
返回頂端
論壇首頁
-> IT人生
所有的時間均為 美國太平洋時間
第1 頁,共2 頁
分頁: 1 , 2 下一頁
注:以上論壇所有發言僅代表發帖者個人觀點, 並不代表本站觀點或立場, 加西網對此不負任何責任。 投資理財及買房賣房版面的帖子不構成投資建議。投資有風險,責任請自負 對二手買賣中的虛假信息,買賣中的糾紛等均與本站無關。
您不能 在本論壇發表新主題 您不能 在本論壇回復主題 您不能 在本論壇編輯自己的文章 您不能 在本論壇刪除自己的文章 您不能 在本論壇發表投票 您不能 在這個論壇添加附件 您可以 在這個論壇下載文件
論壇轉跳:
選擇一個論壇
焦點板塊
加西知乎
發布求助
買房賣房
美麗的菲沙河谷
地產投資
加西菜園
商海微瀾
租房那些事兒
加國一家親
咱們本拿比
溫哥華不眠夜
日月當空
休閒Langley
菩提樹下
神愛世人
素裡新家園
白石華人
歌聲響起
讀書沙龍
單身情緣
新時代之光
歡迎來新西敏
我愛列治文
高貴林的朋友們
中英雙語班在Walton Elementary
生活互助
法律探索
醫療健康
准備養老
佛道淨土.中醫養生
天下收藏
減肥
投資理財
親子教育
豬寶寶俱樂部
汽車天地
溫村Jeep之家
錢幣交流小站 (Coin Community)
免費個人廣告
會員之家
北美盾之家
流協
吃喝與玩樂
玩玩樂樂
加西群英游艇會
結伴旅游
跳舞俱樂部
北美Hiking
吃吃喝喝
社團之窗
南粵茶居
交通大學校友會
福建同鄉在此聚集
加拿大四川同鄉聯誼會
同濟大學溫哥華校友會
精彩貼圖
精彩連環畫
開心一笑
國家與城市
新聞時評
軍事天地
教師罷工
大溫市選
情系中國
綿綿鄉音
香港占中
嶺南人家
悠悠華夏
只剛上海話
西雅圖夜未央
愛好與沙龍
原創原地
攝影交流
白石鎮攝影交流
視聽世界
瘋人院 - 你的喜鵲巢
電子電玩
Twitter 交流
蘋果樂園
android的星空
無限手機計劃
部落沖突
大數據論壇
網站建設
顛覆小組—LINUX
IT人生
iTalkBB討論組
English Corner
生活與教育
美好家居
精致生活
移民資訊
溫哥華留學
寵物樂園
致富與創業
精明消費
炫彩珠寶
南下購物
創業沙龍
職場風雲
運動與休閒
羽毛球場
高爾夫俱樂部
休閒運動
加西滑雪俱樂部
加西游泳俱樂部
武術之家
國家台球事務辦公室
加西圍棋俱樂部
網球天地
癡迷足球
乒乓球場
年青人天地
周末娛樂
美酒咖啡
彩妝
西餐美食
溫哥華高爾夫
webdriver, webdriver, webdriver, webdriver, webdriver, deerlake, dwen999, 名震一方, webdriver, hairinwind
最新新聞
熱門新聞
熱評新聞
無人機穿越大理千年古塔落券洞內 涉事"飛手"被拘
澤連斯基稱烏克蘭已准備好實現為期30天的停火!
妻子舉報丈夫涉嫌重婚:同一小區內兩個"家"
A股"掌門"薪酬曝光:13名董事長年薪超千萬
美英宣布達成貿易協議 但具體細節尚待敲定
緬甸多個電詐園區用"星鏈"上網 馬斯克被質疑...
中國工信部出手整頓隱藏式汽車車門把手
英媒:比黃金還珍貴的月塵從中國運抵英國
美國官員:巴基斯坦用殲-10擊落印度陣風,沒用F-16
紀念蘇聯偉大衛國戰爭勝利80周年,紀念的是什麼?
應對貿易戰,歐盟的"籌碼"與"祭品"...
反抗中共威權教會我的事:順從無法換來仁慈
喉嚨出現5症狀 可能是食道癌前兆
金巧巧回應"不適合演農村人"言論:原意是說演技窄
印巴沖突升級以來莫迪首次發表講話,敦促各部...
"疫苗導致的死亡海嘯已經來臨" 中國博主發文
塵埃落定!"安胖"牽手桑巴軍團,劍指世界杯
廣東發布31條振興消費方案 以舊換新、薪資成長…
下狠手!9場狂丟16球 國足門神被棄用?
歐冠決賽:法甲豪門被看高,藍黑軍團存隱憂
61歲韋唯定居泰國,養水牛種水稻
素裡雙重凶殺案 21歲男子被控罪
科學家"算"出地球生命終結的時間
高速路上2歲娃駕車 父親一臉淡定 網友憤怒
上海推動商戶「輕微免罰」 讓企業休養生息振經濟
中國很難介入"巴鐵"和印度之戰(圖
川普稱中國要求會談 美財長:中國不是發展中國家
"他們滿腦子都是錢,留學生千萬別來!"
瑞士談判之際,美中傳來利好大消息
中國不賣了 價漲210% "卡脖子"大殺器
"疫苗導致的死亡海嘯已經來臨" 中國博主發文
加拿大皇家馬戲團素裡列治文開演
蓋茨擬捐幾乎全部身家 斥馬斯克殺最貧窮兒童
溫市中心將聳立315米高樓 BC最高
少女濾鏡徹底碎了!75歲王薇薇紅毯生圖嚇到網民
內幕:習誤判慘遭重擊 終給川普遞上誠意清單
塵埃落定!"安胖"牽手桑巴軍團,劍指世界杯
廣東發布31條振興消費方案 以舊換新、薪資成長…
瑞士談判之際,美中傳來利好大消息
下狠手!9場狂丟16球 國足門神被棄用?
歐冠決賽:法甲豪門被看高,藍黑軍團存隱憂
61歲韋唯定居泰國,養水牛種水稻
素裡雙重凶殺案 21歲男子被控罪
上海推動商戶「輕微免罰」 讓企業休養生息振經濟
中國很難介入"巴鐵"和印度之戰(圖