乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      如何編寫無(wú)法維護(hù)的代碼1

       123xyz123 2018-04-27


      簡(jiǎn)介

      永遠(yuǎn)不要(把自己遇到的問(wèn)題)歸因于(他人的)惡意,這恰恰說(shuō)明了(你自己的)無(wú)能。 — 拿破侖

      為了造福大眾,在Java編程領(lǐng)域創(chuàng)造就業(yè)機(jī)會(huì),兄弟我在此傳授大師們的秘籍。這些大師寫的代碼極其難以維護(hù),后繼者就是想對(duì)它做最簡(jiǎn)單的修改都需要花上數(shù)年時(shí)間。而且,如果你能對(duì)照秘籍潛心修煉,你甚至可以給自己弄個(gè)鐵飯碗,因?yàn)槌四阒?,沒(méi)人能維護(hù)你寫的代碼。再而且,如果你能練就秘籍中的全部招式,那么連你自己都無(wú)法維護(hù)你的代碼了!

      你不想練功過(guò)度走火入魔吧。那就不要讓你的代碼一眼看去就完全無(wú)法維護(hù),只要它實(shí)質(zhì)上是那樣就行了。否則,你的代碼就有被重寫或重構(gòu)的風(fēng)險(xiǎn)!

      總體原則

      Quidquid latine dictum sit, altum sonatur.
      (隨便用拉丁文寫點(diǎn)啥都會(huì)顯得高大上。)

      想挫敗維護(hù)代碼的程序員,你必須先明白他的思維方式。他接手了你的龐大程序,沒(méi)有時(shí)間把它全部讀一遍,更別說(shuō)理解它了。他無(wú)非是想快速找到修改代碼的位置、改代碼、編譯,然后就能交差,并希望他的修改不會(huì)出現(xiàn)意外的副作用。

      他查看你的代碼不過(guò)是管中窺豹,一次只能看到一小段而已。你要確保他永遠(yuǎn)看不到全貌。要盡量讓他難以找到他想找的代碼。但更重要的是,要讓他不能有把握忽略任何東西。

      程序員都被編程慣例洗腦了,還為此自鳴得意。每一次你處心積慮地違背編程慣例,都會(huì)迫使他必須用放大鏡去仔細(xì)閱讀你的每一行代碼。

      你可能會(huì)覺(jué)得每個(gè)語(yǔ)言特性都可以用來(lái)讓代碼難以維護(hù),其實(shí)不然。你必須精心地誤用它們才行。

       命名

      “當(dāng)我使用一個(gè)單詞的時(shí)候” Humpty Dumpty 曾經(jīng)用一種輕蔑的口氣說(shuō), “它就是我想表達(dá)的意思,不多也不少?!?/span>
      – Lewis Carroll — 《愛(ài)麗絲魔鏡之旅》, 第6章

      編寫無(wú)法維護(hù)代碼的技巧的重中之重是變量和方法命名的藝術(shù)。如何命名是和編譯器無(wú)關(guān)的。這就讓你有巨大的自由度去利用它們迷惑維護(hù)代碼的程序員。

      妙用 寶寶起名大全

      買本寶寶起名大全,你就永遠(yuǎn)不缺變量名了。比如 Fred 就是個(gè)好名字,而且鍵盤輸入它也省事。如果你就想找一些容易輸入的變量名,可以試試 adsf 或者 aoeu之類。

      單字母變量名

      如果你給變量起名為a,b,c,用簡(jiǎn)單的文本編輯器就沒(méi)法搜索它們的引用。而且,沒(méi)人能猜到它們的含義。

      創(chuàng)造性的拼寫錯(cuò)誤

      如果你必須使用描述性的變量和函數(shù)名,那就把它們都拼錯(cuò)。還可以把某些函數(shù)和變量名拼錯(cuò),再把其他的拼對(duì)(例如 SetPintleOpening 和 SetPintalClosing) ,我們就能有效地將grep或IDE搜索技術(shù)玩弄于股掌之上。這招超級(jí)管用。還可以混淆不同語(yǔ)言(比如colour — 英國(guó)英語(yǔ),和 color — 美國(guó)英語(yǔ))。

      抽象

      在命名函數(shù)和變量的時(shí)候,充分利用抽象單詞,例如 it, everything, data, handle, stuff, do, routine, perform 和數(shù)字,像這樣命名的好例子有 routineX48, PerformDataFunction, DoIt, HandleStuff還有 do_args_method。

      首字母大寫的縮寫

      用首字母大寫縮寫(比如GNU 代表 GNU’s Not Unix) 使代碼簡(jiǎn)潔難懂。真正的漢子(無(wú)論男女)從來(lái)不說(shuō)明這種縮寫的含義,他們生下來(lái)就懂。

      辭典大輪換

      為了打破沉悶的編程氣氛,你可以用一本辭典來(lái)查找盡量多的同義詞。例如 display, show, present。在注釋里含糊其辭地暗示這些命名之間有細(xì)微的差別,其實(shí)根本沒(méi)有。不過(guò),如果有兩個(gè)命名相似的函數(shù)真的有重大差別,那倒是一定要確保它們用相同的單詞來(lái)命名(例如,對(duì)于 “寫入文件”, “在紙上書寫” 和 “屏幕顯示” 都用 print 來(lái)命名)。 在任何情況下都不要屈服于編寫明確的項(xiàng)目詞匯表這種無(wú)理要求。你可以辯解說(shuō),這種要求是一種不專業(yè)的行為,它違反了結(jié)構(gòu)化設(shè)計(jì)的信息隱藏原則。

      首字母大寫

      隨機(jī)地把單詞中間某個(gè)音節(jié)的首字母大寫。例如 ComputeReSult()。

      重用命名

      在語(yǔ)言規(guī)則允許的地方,盡量把類、構(gòu)造器、方法、成員變量、參數(shù)和局部變量都命名成一樣。更高級(jí)的技巧是在{}塊中重用局部變量。這樣做的目的是迫使維護(hù)代碼的程序員認(rèn)真檢查每個(gè)實(shí)例的作用域。特別是在Java代碼中,可以把普通方法偽裝成構(gòu)造器。

      使用非英語(yǔ)字母

      在命名中偷偷使用不易察覺(jué)的非英語(yǔ)字母,例如
      1
      typedef struct { int i; } ínt;

      看上去沒(méi)啥不對(duì)是吧?嘿嘿嘿…這里的第二個(gè) ínt 的 í 實(shí)際上是東北歐字母,并不是英語(yǔ)中的 i 。在簡(jiǎn)單的文本編輯器里,想看出這一點(diǎn)點(diǎn)區(qū)別幾乎是不可能的。

      巧妙利用編譯器對(duì)于命名長(zhǎng)度的限制

      如果編譯器只區(qū)分命名的前幾位,比如前8位,那么就把后面的字母寫得不一樣。比如,其實(shí)是同一個(gè)變量,有時(shí)候?qū)懗?var_unit_update() ,有時(shí)候又寫成 var_unit_setup(),看起來(lái)是兩個(gè)不同的函數(shù)調(diào)用。而在編譯的時(shí)候,它們其實(shí)是同一個(gè)變量 var_unit。

      下劃線,真正的朋友

      可以拿 _ 和 __ 作為標(biāo)示符。

      混合多語(yǔ)言

      隨機(jī)地混用兩種語(yǔ)言(人類語(yǔ)言或計(jì)算機(jī)語(yǔ)言都行)。如果老板要求使用他指定的語(yǔ)言,你就告訴他你用自己的語(yǔ)言更有利于組織你的思路,萬(wàn)一這招不管用,就去控訴這是語(yǔ)言歧視,并威脅起訴老板要求巨額精神損失賠償。

      擴(kuò)展 ASCII 字符

      擴(kuò)展 ASCII 字符用于變量命名是完全合法的,包括 ?, D, 和 ?  等。在簡(jiǎn)單的文本編輯器里,除了拷貝/粘貼,基本上沒(méi)法輸入。

      其他語(yǔ)言的命名

      使用外語(yǔ)字典作為變量名的來(lái)源。例如,可以用德語(yǔ)單詞 punkt 代替 point。除非維護(hù)代碼的程序員也像你一樣熟練掌握了德語(yǔ). 不然他就只能盡情地在代碼中享受異域風(fēng)情了。

      數(shù)學(xué)命名

      用數(shù)學(xué)操作符的單詞來(lái)命名變量。例如:
      1
      openParen = (slash + asterix) / equals;
      (左圓括號(hào) = (斜杠 + 星號(hào))/等號(hào);)

      令人眩暈的命名

      用帶有完全不相關(guān)的感情色彩的單詞來(lái)命名變量。例如:
      1
      marypoppins = (superman + starship) / god;
      (歡樂(lè)滿人間 = (超人 + 星河戰(zhàn)隊(duì))/上帝;)
      這一招可以讓閱讀代碼的人陷入迷惑之中,因?yàn)樗麄冊(cè)谠噲D想清楚這些命名的邏輯時(shí),會(huì)不自覺(jué)地聯(lián)系到不同的感情場(chǎng)景里而無(wú)法自拔。

      何時(shí)使用 i

      永遠(yuǎn)不要把 i 用作最內(nèi)層的循環(huán)變量。 用什么命名都行,就是別用i。把 i 用在其他地方就隨便了,用作非整數(shù)變量尤其好。

      慣例 — 明修棧道,暗度陳倉(cāng)

      忽視 Java 編碼慣例,Sun 自己就是這樣做的。幸運(yùn)的是,你違反了它編譯器也不會(huì)打小報(bào)告。這一招的目的是搞出一些在某些特殊情況下有細(xì)微差別的名字來(lái)。如果你被強(qiáng)迫遵循駝峰法命名,你還是可以在某些模棱兩可的情況下顛覆它。例如,inputFilename 和 inputfileName 兩個(gè)命名都可以合法使用。在此基礎(chǔ)上自己發(fā)明一套復(fù)雜到變態(tài)的命名慣例,然后就可以痛扁其他人,說(shuō)他們違反了慣例。

      小寫的 l 看上去很像數(shù)字 1

      用小寫字母 l 標(biāo)識(shí) long 常數(shù)。例如 10l 更容易被誤認(rèn)為是 101 而不是 10L 。 禁用所有能讓人準(zhǔn)確區(qū)分 uvw wW gq9 2z 5s il17|!j oO08 `’” ;,. m nn rn {[()]} 的字體。要做個(gè)有創(chuàng)造力的人。

      把全局命名重用為私有

      在A 模塊里聲明一個(gè)全局?jǐn)?shù)組,然后在B 模塊的頭文件里再聲明一個(gè)同名的私有數(shù)組,這樣看起來(lái)你在B 模塊里引用的是那個(gè)全局?jǐn)?shù)組,其實(shí)卻不是。不要在注釋里提到這個(gè)重復(fù)的情況。

      誤導(dǎo)性的命名

      讓每個(gè)方法都和它的名字蘊(yùn)含的功能有一些差異。例如,一個(gè)叫 isValid(x)的方法在判斷完參數(shù)x的合法性之后,還順帶著把它轉(zhuǎn)換成二進(jìn)制并保存到數(shù)據(jù)庫(kù)里。

       偽裝

      當(dāng)一個(gè)bug需要越長(zhǎng)的時(shí)間才會(huì)暴露,它就越難被發(fā)現(xiàn)。- Roedy Green(本文作者)

      編寫無(wú)法維護(hù)代碼的另一大秘訣就是偽裝的藝術(shù),即隱藏它或者讓它看起來(lái)像其他東西。很多招式有賴于這樣一個(gè)事實(shí):編譯器比肉眼或文本編輯器更有分辨能力。下面是一些偽裝的最佳招式。

       

      把代碼偽裝成注釋,反之亦然

      下面包括了一些被注釋掉的代碼,但是一眼看去卻像是正常代碼。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      for(j=0; j
      {
           total += array[j+0 ];
           total += array[j+1 ];
           total += array[j+2 ];
           total += array[j+6 ];
           total += array[j+7 ];
      }

      如果不是用綠色標(biāo)出來(lái),你能注意到這三行代碼被注釋掉了么?

      用連接符隱藏變量

      對(duì)于下面的定義
      1
      #define local_var xy_z

      可以把 “xy_z” 打散到兩行里:

      1
      2
      #define local_var xy\
      _z // local_var OK

      這樣全局搜索 xy_z 的操作在這個(gè)文件里就一無(wú)所獲了。 對(duì)于 C 預(yù)處理器來(lái)說(shuō),第一行最后的 “\” 表示繼續(xù)拼接下一行的內(nèi)容。

      文檔

      任何傻瓜都能說(shuō)真話,而要把謊編圓則需要相當(dāng)?shù)闹腔邸?/span>- Samuel Butler (1835 – 1902)

      不正確的文檔往往比沒(méi)有文檔還糟糕。- Bertrand Meyer

      既然計(jì)算機(jī)是忽略注釋和文檔的,你就可以在里邊堂而皇之地編織彌天大謊,讓可憐的維護(hù)代碼的程序員徹底迷失。

       在注釋中撒謊

      實(shí)際上你不需要主動(dòng)地撒謊,只要沒(méi)有及時(shí)保持注釋和代碼更新的一致性就可以了。

      只記錄顯而易見(jiàn)的東西

      往代碼里摻進(jìn)去類似于
      1
      這樣的注釋,但是永遠(yuǎn)不要記錄包或者方法的整體設(shè)計(jì)這樣的干貨。

      記錄 How 而不是 Why

      只解釋一個(gè)程序功能的細(xì)節(jié),而不是它要完成的任務(wù)是什么。這樣的話,如果出現(xiàn)了一個(gè)bug,修復(fù)者就搞不清這里的代碼應(yīng)有的功能。

      該寫的別寫

      比如你在開(kāi)發(fā)一套航班預(yù)定系統(tǒng),那就要精心設(shè)計(jì),讓它在增加另一個(gè)航空公司的時(shí)候至少有25處代碼需要修改。永遠(yuǎn)不要在文檔里說(shuō)明要修改的位置。后來(lái)的開(kāi)發(fā)人員要想修改你的代碼?門都沒(méi)有,除非他們能把每一行代碼都讀懂。

      計(jì)量單位

      永遠(yuǎn)不要在文檔中說(shuō)明任何變量、輸入、輸出或參數(shù)的計(jì)量單位,如英尺、米、加侖等。計(jì)量單位對(duì)數(shù)豆子不是太重要,但在工程領(lǐng)域就相當(dāng)重要了。同理,永遠(yuǎn)不要說(shuō)明任何轉(zhuǎn)換常量的計(jì)量單位,或者是它的取值如何獲得。要想讓代碼更亂的話,你還可以在注釋里寫上錯(cuò)誤的計(jì)量單位,這是赤裸裸的欺騙,但是非常有效。如果你想做一個(gè)惡貫滿盈的人,不妨自己發(fā)明一套計(jì)量單位,用自己或某個(gè)小人物的名字命名這套計(jì)量單位,但不要給出定義。萬(wàn)一有人挑刺兒,你就告訴他們,你這么做是為了把浮點(diǎn)數(shù)運(yùn)算湊成整數(shù)運(yùn)算而進(jìn)行的轉(zhuǎn)換。

      永遠(yuǎn)不要記錄代碼中的坑。如果你懷疑某個(gè)類里可能有bug,天知地知你知就好。如果你想到了重構(gòu)或重寫代碼的思路,看在老天爺?shù)姆萆希f(wàn)別寫出來(lái)。切記電影《小鹿斑比》里那句臺(tái)詞 “如果你不能說(shuō)好聽(tīng)的話,那就什么也不要說(shuō)?!?。萬(wàn)一這段代碼的原作者看到你的注釋怎么辦?萬(wàn)一老板看到了怎么辦?萬(wàn)一客戶看到了怎么辦?搞不好最后你自己被解雇了。一句”這里需要修改“的匿名注釋就好多了,尤其是當(dāng)看不清這句注釋指的是哪里需要修改的情況下。切記“難得糊涂”四個(gè)字,這樣大家都不會(huì)感覺(jué)受到了批評(píng)。

      說(shuō)明變量

      永遠(yuǎn)不要對(duì)變量聲明加注釋。有關(guān)變量使用的方式、邊界值、合法值、小數(shù)點(diǎn)后的位數(shù)、計(jì)量單位、顯示格式、數(shù)據(jù)錄入規(guī)則等等,后繼者完全可以自己從程序代碼中去理解和整理嘛。如果老板強(qiáng)迫你寫注釋,就在方法體里胡亂多寫點(diǎn),但絕對(duì)不要對(duì)變量聲明寫注釋,即使是臨時(shí)變量!

      在注釋里挑撥離間

      為了阻撓任何雇傭外部維護(hù)承包商的傾向,可以在代碼中散布針對(duì)其他同行軟件公司的攻擊和抹黑,特別是可能接替你工作的其中任何一家。例如:
      1
      2
      3
      4
      5
      6
      7
      8
      class clever_SSInc
      {
      .. .
      }
      可能的話,除了注釋之外,這些攻擊抹黑的內(nèi)容也要摻到代碼里的重要語(yǔ)義部分,這樣如果管理層想清理掉這些攻擊性的言論然后發(fā)給外部承包商去維護(hù),就會(huì)破壞代碼結(jié)構(gòu)。

      程序設(shè)計(jì)

      編寫無(wú)法維護(hù)代碼的基本規(guī)則就是:在盡可能多的地方,以盡可能多的方式表述每一個(gè)事實(shí)。- Roedy Green

      編寫可維護(hù)代碼的關(guān)鍵因素是只在一個(gè)地方表述應(yīng)用里的一個(gè)事實(shí)。如果你的想法變了,你也只在一個(gè)地方修改,這樣就能保證整個(gè)程序正常工作。所以,編寫無(wú)法維護(hù)代碼的關(guān)鍵因素就是反復(fù)地表述同一個(gè)事實(shí),在盡可能多的地方,以盡可能多的方式進(jìn)行。令人高興的是,像Java這樣的語(yǔ)言讓編寫這種無(wú)法維護(hù)代碼變得非常容易。例如,改變一個(gè)被引用很多的變量的類型幾乎是不可能的,因?yàn)樗性煨秃娃D(zhuǎn)換功能都會(huì)出錯(cuò),而且關(guān)聯(lián)的臨時(shí)變量的類型也不合適了。而且,如果變量值要在屏幕上顯示,那么所有相關(guān)的顯示和數(shù)據(jù)錄入代碼都必須一一找到并手工進(jìn)行修改。類似的還有很多,比如由C和Java組成的Algol語(yǔ)言系列,Abundance甚至Smalltalk對(duì)于數(shù)組等結(jié)構(gòu)的處理,都是大有可為的。

      Java 造型

      Java的造型機(jī)制是上帝的禮物。你可以問(wèn)心無(wú)愧地使用它,因?yàn)镴ava語(yǔ)言本身就需要它。每次你從一個(gè)Collection 里獲取一個(gè)對(duì)象,你都必須把它造型為原始類型。這樣這個(gè)變量的類型就必須在無(wú)數(shù)地方表述。如果后來(lái)類型變了,所有的造型都要修改才能匹配。如果倒霉的維護(hù)代碼的程序員沒(méi)有找全(或者修改太多),編譯器能不能檢測(cè)到也不好說(shuō)。類似的,如果變量類型從short 變成 int,所有匹配的造型也都要從(short) 改成 (int)。

      利用Java的冗余

      Java要求你給每個(gè)變量的類型寫兩次表述。 Java 程序員已經(jīng)習(xí)慣了這種冗余,他們不會(huì)注意到你的兩次表述有細(xì)微的差別,例如
      1
      Bubblegum b = new Bubblegom();
      不幸的是 ++ 操作符的盛行讓下面這種偽冗余代碼得手的難度變大了:
      1
      swimmer = swimner + 1;

      永遠(yuǎn)不做校驗(yàn)

      永遠(yuǎn)不要對(duì)輸入數(shù)據(jù)做任何的正確性或差異性檢查。這樣能表現(xiàn)你對(duì)公司設(shè)備的絕對(duì)信任,以及你是一位信任所有項(xiàng)目伙伴和系統(tǒng)管理員的團(tuán)隊(duì)合作者??偸欠祷睾侠淼闹?,即使數(shù)據(jù)輸入有問(wèn)題或者錯(cuò)誤。

      有禮貌,無(wú)斷言

      避免使用 assert() 機(jī)制,因?yàn)樗赡馨讶斓膁ebug盛宴變成10分鐘的快餐。

      避免封裝

      為了提高效率,不要使用封裝。方法的調(diào)用者需要所有能得到的外部信息,以便了解方法的內(nèi)部是如何工作的。

      復(fù)制粘貼修改

      以效率的名義,使用 復(fù)制+粘貼+修改。這樣比寫成小型可復(fù)用模塊效率高得多。在用代碼行數(shù)衡量你的進(jìn)度的小作坊里,這招尤其管用。

      使用靜態(tài)數(shù)組

      如果一個(gè)庫(kù)里的模塊需要一個(gè)數(shù)組來(lái)存放圖片,就定義一個(gè)靜態(tài)數(shù)組。沒(méi)人會(huì)有比512 X 512 更大的圖片,所以固定大小的數(shù)組就可以了。為了最佳精度,就把它定義成 double 類型的數(shù)組。

      傻瓜接口

      編寫一個(gè)名為 “WrittenByMe” 之類的空接口,然后讓你的所有類都實(shí)現(xiàn)它。然后給所有你用到的Java 內(nèi)置類編寫包裝類。這里的思想是確保你程序里的每個(gè)對(duì)象都實(shí)現(xiàn)這個(gè)接口。最后,編寫所有的方法,讓它們的參數(shù)和返回類型都是這個(gè) WrittenByMe。這樣就幾乎不可能搞清楚某個(gè)方法的功能是什么,并且所有類型都需要好玩的造型方法。更出格的玩法是,讓每個(gè)團(tuán)隊(duì)成員編寫它們自己的接口(例如 WrittenByJoe),程序員用到的任何類都要實(shí)現(xiàn)他自己的接口。這樣你就可以在大量無(wú)意義接口中隨便找一個(gè)來(lái)引用對(duì)象了。

      巨型監(jiān)聽(tīng)器

      永遠(yuǎn)不要為每個(gè)組件創(chuàng)建分開(kāi)的監(jiān)聽(tīng)器。對(duì)所有按鈕總是用同一個(gè)監(jiān)聽(tīng)器,只要用大量的if…else 來(lái)判斷是哪一個(gè)按鈕被點(diǎn)擊就行了。

      好事成堆TM

      狂野地使用封裝和OO思想。例如
      1
      2
      3
      4
      5
      myPanel.add( getMyButton() );
      private JButton getMyButton()
      {
           return myButton;
      }
      這段很可能看起來(lái)不怎么好笑。別擔(dān)心,只是時(shí)候未到而已。

      友好的朋友

      在C++ 里盡量多使用friend聲明。再把創(chuàng)建類的指針傳遞給已創(chuàng)建類。現(xiàn)在你不用浪費(fèi)時(shí)間去考慮接口了。另外,你應(yīng)該用上關(guān)鍵字private 和 protected 來(lái)表明你的類封裝得很好。

      使用三維數(shù)組

      大量使用它們。用扭曲的方式在數(shù)組之間移動(dòng)數(shù)據(jù),比如,用arrayA里的行去填充arrayB的列。這么做的時(shí)候,不管三七二十一再加上1的偏移值,這樣很靈。讓維護(hù)代碼的程序員抓狂去吧。

      混合與匹配

      存取方法和公共變量神馬的都要給他用上。這樣的話,你無(wú)需調(diào)用存取器的開(kāi)銷就可以修改一個(gè)對(duì)象的變量,還能宣稱這個(gè)類是個(gè)”Java Bean”。對(duì)于那些試圖添加日志函數(shù)來(lái)找出改變值的源頭的維護(hù)代碼的程序員,用這一招來(lái)迷惑他尤其有效。

      沒(méi)有秘密!

      把每個(gè)方法和變量都聲明為 public。畢竟某個(gè)人某天可能會(huì)需要用到它。一旦方法被聲明為public 了,就很難縮回去。對(duì)不?這樣任何它覆蓋到的代碼都很難修改了。它還有個(gè)令人愉快的副作用,就是讓你看不清類的作用是什么。如果老板質(zhì)問(wèn)你是不是瘋了,你就告訴他你遵循的是經(jīng)典的透明接口原則。

      全堆一塊

      把你所有的沒(méi)用的和過(guò)時(shí)的方法和變量都留在代碼里。畢竟說(shuō)起來(lái),既然你在1976年用過(guò)一次,誰(shuí)知道你啥時(shí)候會(huì)需要再用到呢?當(dāng)然程序是改了,但它也可能會(huì)改回來(lái)嘛,你”不想要重新發(fā)明輪子”(領(lǐng)導(dǎo)們都會(huì)喜歡這樣的口氣)。如果你還原封不動(dòng)地留著這些方法和變量的注釋,而且注釋寫得又高深莫測(cè),甭管維護(hù)代碼的是誰(shuí),恐怕都不敢對(duì)它輕舉妄動(dòng)。

      就是 Final

      把你所有的葉子類都聲明為 final。畢竟說(shuō)起來(lái),你在項(xiàng)目里的活兒都干完了,顯然不會(huì)有其他人會(huì)通過(guò)擴(kuò)展你的類來(lái)改進(jìn)你的代碼。這種情況甚至可能有安全漏洞。 java.lang.String 被定義成 final 也許就是這個(gè)原因吧?如果項(xiàng)目組其他程序員有意見(jiàn),告訴他們這樣做能夠提高運(yùn)行速度。

      避免布局

      永遠(yuǎn)不要用到布局。當(dāng)維護(hù)代碼的程序員想增加一個(gè)字段,他必須手工調(diào)整屏幕上顯示所有內(nèi)容的絕對(duì)坐標(biāo)值。如果老板強(qiáng)迫你使用布局,那就寫一個(gè)巨型的 GridBagLayout 并在里面用絕對(duì)坐標(biāo)進(jìn)行硬編碼。

      全局變量,怎么強(qiáng)調(diào)都不過(guò)分

      如果上帝不愿意我們使用全局變量,他就不會(huì)發(fā)明出這個(gè)東西。不要讓上帝失望,盡量多使用全局變量。每個(gè)函數(shù)最起碼都要使用和設(shè)置其中的兩個(gè),即使沒(méi)有理由也要這么做。畢竟,任何優(yōu)秀的維護(hù)代碼的程序員都會(huì)很快搞清楚這是一種偵探工作測(cè)試,有利于讓他們從笨蛋中脫穎而出。

      再一次說(shuō)說(shuō)全局變量

      全局變量讓你可以省去在函數(shù)里描述參數(shù)的麻煩。充分利用這一點(diǎn)。在全局變量中選那么幾個(gè)來(lái)表示對(duì)其他全局變量進(jìn)行操作的類型。

      局部變量

      永遠(yuǎn)不要用局部變量。在你感覺(jué)想要用的時(shí)候,把它改成一個(gè)實(shí)例或者靜態(tài)變量,并無(wú)私地和其他方法分享它。這樣做的好處是,你以后在其他方法里寫類似聲明的時(shí)候會(huì)節(jié)省時(shí)間。C++程序員可以百尺竿頭更進(jìn)一步,把所有變量都弄成全局的。

      配置文件

      配置文件通常是以 關(guān)鍵字 = 值 的形式出現(xiàn)。在加載時(shí)這些值被放入 Java 變量中。最明顯的迷惑技術(shù)就是把有細(xì)微差別的名字用于關(guān)鍵字和Java 變量.甚至可以在配置文件里定義運(yùn)行時(shí)根本不會(huì)改變的常量。參數(shù)文件變量和簡(jiǎn)單變量比,維護(hù)它的代碼量起碼是后者的5倍。


        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多