民初思韻網

加入收藏   設為首頁
選擇語言   簡體中文
你好,請 登陸 或 注冊
首頁 人文思韻 傳奇人物 歷史思潮 時代作品 話題討論 國民思韻 民初捐助 賬戶管理
  搜索  
    人文精神 >>> 技術的天空 溫和的思緒
字體    

我的大腦不能再處理面向對象了
我的大腦不能再處理面向對象了
伯樂在線     阅读简体中文版

英文原文:My brain can’t handle OOP anymore

  今天我意識到已經沒有什么比面向對象編程更困擾我了。尤其是 Java。人們確實都在用它嗎!?

  — Swizec (@Swizec) April 29, 2012

  前幾個星期我在做一個編譯器的作業——語義分析部分要用到面向對象,簡直是噩夢。需要用訪問者模式去遍歷樹,并做些奇怪的事情。

  這讓我一度想在角落里蜷縮起來,在臥室里邊自言自語,邊來回搖晃。這讓River Tam在逃離房間前大喊:“太擁擠了!”

  OOP像什么

神經病?

  在面向對象編程里,一切都攪在一起。函數和數據綁在一起,所有的一切都相互依賴,當你要調用一個函數時根本就不知道這個函數用來做什么。

  而且這是在假設單個對象是沒有什么錯誤的情況下的。不然誰又知道會發生什么呢?這個世界就要爆炸了!

  面向對象寫出來的軟件根本沒辦法理解。我曾經覺得我可以理解,但我寫了幾個月的面向過程的程序后,我發現我已經沒有腦力去理解面向對象的代碼了。太亂了。

  當你要使用單例模式時,并且一個對象要使用另外一個對象時。讓我給你看個實例:

foo: object {
   i: private integer = 0;
   add: function (a:integer) {
      i += a;
      return i;
   }
}
/* lots of code happens here, foo has been passed around, things happened */
/* foo is not a singleton though, just used a lot */
a:integer = foo.add(5); 
// What is the value of a?

  要回答這個簡單的問題需要知道一切:foo的整個執行歷史,整個代碼。是你命名的,你必須記住名字。

  噢,我有提到bar類嗎?它依賴于foo。哦耶,它們去年因為利益而成為了朋友。相當有趣。盡管bar曾經用baz騙過foo(譯者注:foo和bar在計算機世界里常被用于例子中的變量名,函數名。)沒有人知道foo將會如何反擊!

  面向過程編程

  在@sbelak 的數次激勵下,我在兩年前開始學習面向過程編程。

  有人說面向過程可擴展性更高,幾乎不需要更多的代價就可以擴展到多處理器上,清晰的代碼,可以寫出更容易開發、更容易維護、更少bug的軟件。

  我雖然沒有體會到所有的這些好處,但我現在已經可以用一種新的思維來思考我寫的代碼了,那是一種更容易理解的方法。

  最初寫函數式程序時,就像對我進行前腦切除手術一樣痛苦,就像用熱紅的烙鐵燒我的腳一般讓我掙扎不堪。你確定這里不需要用循環語句?但我需要變量,不是嗎?至少要一點可變性吧?真的嗎?不需要嗎?這就像一種儀式,任何時候你們都可能會跳起來,對我說“給你個驚喜”,然后開始嘲笑我。

  但我堅持下來了。雖然我的代碼看上去很可怕,但我愛上了它了。

  函數式代碼首先吸引我的地方就是在于寫python函數時僅需要傳遞數據。不需要儲存中間變量,僅僅傳遞一個函數的結果給另外一個函數。

  誰又在乎中間的步驟?我關心的僅僅是這一大塊代碼創建了X,而不是它首先做了Y,然后Z,然后把A和B合并成了X。

  當然,你當然可以定義一個X的函數,將Y,Z,A,B都包含在內,但為什么要創建一個僅僅被調用過一次的函數呢?僅僅像這樣

  X = A+B(Y(Z)) 不是更好么?

  數據的瀑布

普萊維斯瀑布

  我現在思考代碼的方式是就像是數據的瀑布。

  你有了數據,函數鏈上的函數都是一個暗礁。數據持續的下落,可能改變了某些屬性,然后落到了下一個函數上。

  最后你有一個水池了。就在這里你的數據在經歷了許多函數后,最后落進了水池。可能它還會下落到下一個函數,或者你在需要的時候可以使用它。

  你可以說這就是面向過程式編程啊。但它也是函數式編程,這就是我如何理解代碼的。你的想法可能不同。

  不論你是如何理解你的代碼的,不管你在你腦中如何運行代碼——但如果你能處理復雜的面向對象,我就要脫帽對你致敬。你是真的比我厲害。

  我想你應該試試“函數式編程”。你會喜歡它的。

  原文:swizec.com  編譯:伯樂在線 — 唐小娟

2012-06-27 01:25

歡迎訂閱我們的微信公眾賬號!
春秋茶館訂閱號
微信號 season-tea(春秋茶館)
每天分享一篇科技/遊戲/人文類的資訊,點綴生活,啟迪思想,探討古典韻味。
  清末民初歷史人物  民初人物
教育專家大學思想啟蒙
蔡元培(1868年1月11日-1940年3月5日),字鶴卿,又字仲申、民友、孑民,乳名阿培,並曾化名蔡振、周子餘,浙江紹興山陰縣(今紹興縣)人,革命家、教育家、政治家。中....
高文費而隱 古德潔無華
楊霽園先生是民國時期寧波的一位大儒,一生致力于教育、述著,著作宏豐,在國學、文學等方面成就卓著,更兼他品行方端、至誠至孝,自1940年去世后,鄉人及門生一直追思不息。但楊....
資助民初精神網
        回頂部     寫評論

 
評論集
暫無評論!
發表評論歡迎你的評論
昵稱:     登陸  註冊
主頁:  
郵箱:  (僅管理員可見)

驗證:   验证码(不區分大小寫)  
© 2011   民初思韻網-清末民初傳奇時代的發現與復興   版權所有   加入收藏    設為首頁    聯繫我們    1616導航