新聞中心
今天我意識到已經(jīng)沒有什么比面向?qū)ο缶幊谈_我了。尤其是 Java。人們確實都在用它嗎!?

— Swizec (@Swizec) April 29, 2012
前幾個星期我在做一個編譯器的作業(yè)——語義分析部分要用到面向?qū)ο螅喼笔秦瑝?。需要用訪問者模式去遍歷樹,并做些奇怪的事情。
這讓我一度想在角落里蜷縮起來,在臥室里邊自言自語,邊來回搖晃。這讓River Tam在逃離房間前大喊:“太擁擠了!”
OOP像什么
[[79120]]
神經(jīng)病?
在面向?qū)ο缶幊汤?,一切都攪在一起。函?shù)和數(shù)據(jù)綁在一起,所有的一切都相互依賴,當你要調(diào)用一個函數(shù)時根本就不知道這個函數(shù)用來做什么。
而且這是在假設(shè)單個對象是沒有什么錯誤的情況下的。不然誰又知道會發(fā)生什么呢?這個世界就要爆炸了!
面向?qū)ο髮懗鰜淼能浖緵]辦法理解。我曾經(jīng)覺得我可以理解,但我寫了幾個月的面向過程的程序后,我發(fā)現(xiàn)我已經(jīng)沒有腦力去理解面向?qū)ο蟮拇a了。太亂了。
- 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的整個執(zhí)行歷史,整個代碼。是你命名的,你必須記住名字。
噢,我有提到bar類嗎?它依賴于foo。哦耶,它們?nèi)ツ暌驗槔娑蔀榱伺笥?。相當有趣。盡管bar曾經(jīng)用baz騙過foo(譯者注:foo和bar在計算機世界里常被用于例子中的變量名,函數(shù)名。)沒有人知道foo將會如何反擊!
面向過程編程
在@sbelak 的數(shù)次激勵下,我在兩年前開始學習面向過程編程。
有人說面向過程可擴展性更高,幾乎不需要更多的代價就可以擴展到多處理器上,清晰的代碼,可以寫出更容易開發(fā)、更容易維護、更少bug的軟件。
我雖然沒有體會到所有的這些好處,但我現(xiàn)在已經(jīng)可以用一種新的思維來思考我寫的代碼了,那是一種更容易理解的方法。
最初寫函數(shù)式程序時,就像對我進行前腦切除手術(shù)一樣痛苦,就像用熱紅的烙鐵燒我的腳一般讓我掙扎不堪。你確定這里不需要用循環(huán)語句?但我需要變量,不是嗎?至少要一點可變性吧?真的嗎?不需要嗎?這就像一種儀式,任何時候你們都可能會跳起來,對我說“給你個驚喜”,然后開始嘲笑我。
但我堅持下來了。雖然我的代碼看上去很可怕,但我愛上了它了。
函數(shù)式代碼首先吸引我的地方就是在于寫python函數(shù)時僅需要傳遞數(shù)據(jù)。不需要儲存中間變量,僅僅傳遞一個函數(shù)的結(jié)果給另外一個函數(shù)。
誰又在乎中間的步驟?我關(guān)心的僅僅是這一大塊代碼創(chuàng)建了X,而不是它首先做了Y,然后Z,然后把A和B合并成了X。
當然,你當然可以定義一個X的函數(shù),將Y,Z,A,B都包含在內(nèi),但為什么要創(chuàng)建一個僅僅被調(diào)用過一次的函數(shù)呢?僅僅像這樣
X = A+B(Y(Z))不是更好么?
數(shù)據(jù)的瀑布
[[79121]]
普萊維斯瀑布
我現(xiàn)在思考代碼的方式是就像是數(shù)據(jù)的瀑布。
你有了數(shù)據(jù),函數(shù)鏈上的函數(shù)都是一個暗礁。數(shù)據(jù)持續(xù)的下落,可能改變了某些屬性,然后落到了下一個函數(shù)上。
***你有一個水池了。就在這里你的數(shù)據(jù)在經(jīng)歷了許多函數(shù)后,***落進了水池。可能它還會下落到下一個函數(shù),或者你在需要的時候可以使用它。
你可以說這就是面向過程式編程啊。但它也是函數(shù)式編程,這就是我如何理解代碼的。你的想法可能不同。
不論你是如何理解你的代碼的,不管你在你腦中如何運行代碼——但如果你能處理復雜的面向?qū)ο螅揖鸵撁睂δ阒戮?。你是真的比我厲害?/p>
我想你應(yīng)該試試“函數(shù)式編程”。你會喜歡它的。
網(wǎng)頁題目:我的大腦不能再處理面向?qū)ο罅?
文章來源:http://www.dlmjj.cn/article/cochghe.html


咨詢
建站咨詢
