The Old Blog Archive (Traditional Chinese), 2004-2009

看舊 code

我第一次幫人家撰寫命名跟縮排法則是在很早、很早之前的事了。訂立這些規則是一件很有樂趣的事。或許這是某種奇怪的愛好。後來在棄絕的那些漫長的日子中,曾經一度把某一版 MLA Style Guide 給整本 k 完,而且竟然對於「到底句點要放在括號前還是括號後」或是「在又有引號又有括號的句子裡,句點要放引號裡、引號外、還是括號外?」這種事情覺得津津有味。這一定是某種不正常的表現。

重新寫起程式之後,倒是花了相當、相當、相當長的時間,才又像某種緩慢的吸體一樣,把對命名和縮排規則的看重,變為自己的一部分。然後看著自己從前寫的 code ,就會不可思議起來:天啊,我真的當時允許自己寫出這樣的東西來?!

但即使到了現在,我們仍然不時會為命名規則所苦。這裡講的是廣義的命名規則,還包括了標點符號、斷字、大小寫。我們會為了,好比說,Objective-C 的 instance variable 到底要用底線開頭(Apple/WebKit 風格)還是 m_ 開頭(業界普遍流傳、或者說某種被 MS 污染〔誤〕的 C++ 風格),就讓我們頭痛不已。那麼 Interface Builder 相關的成員呢?

命名麻煩的地方在於,它會隨著時間和潮流的改變而跟著變化。甚至,其實命名或許是第一個反應變化的事物,因為世界本來就是在命名之後才生的(這一點可以扯上更多思考與說法,在此不表)。當我們發現 Apple 竟然自己有 sample code 開始使用 mSomeVariable 的時候,著實訝異,卻還猜不透:這種命名改變背後究竟是被什麼考量所驅使的呢?

然後是看到大公司發表的 C++ 寫作風格。閱讀該文件,有如某種經文研究,裡面竟然每一條規則都以某種詰問或者至少是 pros and cons 體裁撰寫。

風格沒有一定,貴在一致和便利。但是大公司的寫作風格跟我認知或習慣所用的很不相同。有的甚至完全逆著我的考量而行之,有的則是在、例如說、前十條規則如此成立之後,就不得不然。

另一方面,這種由諸多規則堆積起來的風格,必有相當多的例外、互相衝突之處(於是又回到了以前學外語時,課堂的鐵律:規則是為了例外而存在的……),以及某種因為要想辦法推廣至每個環節,而某種制度必然帶來的不快(照說風格跟規則不至於帶來情緒……),但是這個世界往往以我們難以理解的方式彰顯自身。我們以為掌握風格,結果是風格在撰寫我們。

不過,再怎麼說,我應該再也不會、也不敢、也不願,寫出像 fooidx (fooIndex), barcnt (barCount), lahlahrfcnt (lahlah… WhatThe????) _ui_config_button (_configButton…. why_is_this_stuff_named_this_way?!!) 這樣的東西了吧。我也會記得變數跟 operator 之間一定要有空白、大括號要打在正確位置、還有絕對不斷行(這一點是從 Delicious Monster 作者 Wil Shipley 學來的,他曾經說過類似人類發明寬螢幕就是給你寫程式不斷行用的、類似這樣的話)。

就好像我會記得大標題裡面 a 不能大寫但 The 首字要大寫那樣……

4 Responses to “看舊 code”

  1. on 04 Jul 2008 at 09:06Amber

    說的好極了!
    大推「風格在撰寫我們」:)
    從格主所說的組織文化的限定、既定語言(不管是pahole或電腦語言層面),都可以看到這個影子:)
    我想到的是傅柯提的discourse,有句話說,「我們在說話,而是話在說我們」,很有異曲同工之妙啊!
    引號也是很好玩的東西。
    哈哈,我曾用太愛用引號,被寫作課的老師說:
    Quote a quotalbe quotation.
    不論如何,能者多勞,格主辛苦了。

  2. on 04 Jul 2008 at 09:10Amber

    不好意思,上文漏打了兩個字:)
    「不是我們在說話,而是話在說我們」。
    出處好像是《知識的考掘》:)好像啦……。

  3. on 04 Jul 2008 at 12:14ljmid

    “棄絕的那段漫長日子” … :p

  4. on 04 Jul 2008 at 12:22ljmid

    rfcnt = reference counter ? XD … 亂猜,這不會是GC 吧。
    世界在命名之後而生,所以你認同 Die Grenzen meiner Welt … 那句嗎?