十種讓人無法閱讀的程式碼風格

5 / 20, 2014 其他

之前小弟看到一個程式碼,是朋友給的,一看到,OMG的這程式碼豪恐怖啊,讓我超難理解的,沒縮排邏輯又莫名其妙,讓我完全沒辦法幫他debug,所以今天想要在此介紹一下哪些程式碼風格會降低易讀性,請一定一定要避免啊!

名稱詭異的變數

變數命名時請盡量使用「該變數的用意」,不要用單一字母(a~z),或是一些亂碼(sdfklads),同時命名時應該避開可能會誤導的內容(hrn & hm),只使用符號,或是無關緊要的變數名稱

莫名其妙的註解

有些東西沒必要寫註解,而且在比較複雜的地方,寫註解時應該要說明運作方式而非用途,要標示單位,不然誰知道這是ms還是sec,同時只有開發時可以把不用的程式註解掉,發布時請直接刪除,同時不要特處標記這段Code誰寫的,毫無意義,更不要拿註解當作開發的來龍去脈,沒人想知道你的美麗故事謝謝

if有20層

這絕對不是開玩笑,當初有人來問小弟他的Code哪裡寫錯,我一打開,我TMD,if else不知道多少層了,難道判斷式就不能寫成一行嗎一定要切成這麼多,來找碴嗎?還有ifelse非常多時,請考慮使用switch,沒有人有空陪你慢慢看if的結尾在哪裡

定義一堆無意義的變數

這是初學者比較容易犯得錯誤,定義太多變數,實際上用到的根本不多,這樣只會消耗記憶體資源和降低效率,變數有用到再用,且對於for迴圈計數用的變數,是可以重複利用的,例如這個for迴圈完了,等一下還有一個,所以就把之前的for迴圈計數器規零重新使用

Copy + Paste

Wow網路上好多別人寫的Code,我就複製下來使用,經濟又實惠,但是,你確定這些Code正常?你確定這些Code是怎麼運作的?會有怎樣的漏洞?搞清楚運作方式和淺在危險,否則不要輕易使用網路上的Code,Code都是人寫的,人就會犯錯,不要相信別人寫的Code

把太多東西塞到一個函數裡面

不要嘗試把所有功能放到一個函式裡面,然後再用if…else…還作判斷,請分成很多function,謝謝,同時像是Javascript的Listener,也是同樣道理

把所有內容寫在同一個文件

這也是初學者比較會犯的錯誤,請善用require功能,把設定或是class或是function,另外寫在一個檔案,不要全部塞在同一個檔案,會讓維護十分吃力

違反正常邏輯的Code

一般工程師會用for迴圈,$i++,喔不我們要獨樹一格,用while搭配$i–,挖我好棒棒,拜託不要這樣啊,寫程式時請盡量符合通用的習慣,或是至少不要差太多,不然會讓人看了很匪夷所思

不縮排或亂縮排

縮排是把Code依照結構作整理,可以更輕鬆閱讀,除非是壓縮版,否則請善用縮排,更不要亂縮排,會讓閱讀十分困難

完全不作測試

人非聖賢,孰能無過,任何人寫Code都會有錯誤,所以寫完Code務必要測試,不要自信過度了

以上就是我大概的整理,希望大家能夠避免以上狀況,也歡迎各位提出自己想法

  • require跟include的差別?

    • s3131212

      require是當檔案不存在或無法正確引入時就Fatal Error並終止程序
      include是當檔案不存在或無法正確引入時顯示Warning,但是程序會繼續執行

  • COPY+PASTE= =
    你確定你沒用過togetherJS或jq之類的?

    • s3131212

      ……….

  • 林岳廷

    太幽默了XDD~

    1.3.4.8點全中XDDDDDDDDD~~~

    • s3131212

      其實我剛剛接觸程式時是10點全中 (笑) ,現在偶而還是會中 1 和 3 XD

  • 黃志仁

    在演算法競賽時有時也管不了這麼多了……
    變數就in0,in1,s,n,a,i這樣@@
    然後while搭配i–我都寫
    while(i–){
     //code here
    }
    (反正code沒人看XDD)

    • s3131212

      比賽就另當別論了啦,反正又沒有要維護

  • 我很好奇怎麼文章裡都沒有句號@@

    • s3131212

      就沒這習慣啊…..
      其實我連寫作文都很常忘記句點而被瘋狂扣分XD

      • 把句點當成程式碼中的Closing Tag就不會忘記的喇XD

        • s3131212

          這解釋了為什麼我常常忘記分號了 (?)

  • Licson Lee

    我總覺得這篇文章有點諷刺的意味……

    • s3131212

      恩對最後一點是寫給你看的(?)

      • 話說Google PSS會很變態的縮排+壓縮+大改寫+大刪減…….
        Google弄出來的東西果然一般人無法閱讀(笑)

        • s3131212

          像Google這麼大的公司,那麼多人存取,一定會作壓縮,不然伺服器流量會太大,不然你看看Google哪個頁面會作縮排的,都馬是壓縮成沒幾行

        • Licson Lee

          我網站的HTML,JS和CSS也是重度壓縮的

  • fishlover2009

    喔對…然後那個文章第三行打錯字了
    “務"必

    • s3131212

      回家後修改,謝謝通知

      • 一個月前….現在還是錯的= =

        • s3131212

          啊,仍然是回家後改XD

  • fishlover2009

    常把一堆功能塞在同個函數/檔案的在下自覺過來認錯了XDD
    寫C/C++還是習慣把一兩百行都寫在main裡面……
    因為弄成函數….我老是會把那些傳參考/傳複雜的資料形別弄錯
    (還有自定的型別/C++ class/運算子過載)就更混亂了
    就覺得弄全域變數 然後不管在哪用變數名稱就能直接存取很方便….
    (新手求原諒)
    (不過我都有好好寫註解)

    • s3131212

      我只寫過基礎的C++,所以不清楚,只知道C++對變數和函數形態很嚴格

  • 這也算是一種加密吧XD( 誤 )

    • s3131212

      讓人難以閱讀,確實有加密效果XD