2021-12-02 11:51:35|已瀏覽:424次

我們鼓勵在編程時應(yīng)有清晰的哲學(xué)思維,而不是給予硬性規(guī)則。我并不希望你們能認(rèn)可所有的東西,因為它們只是觀點,觀點會隨著時間的變化而變化。可是,如果不是直到現(xiàn)在把它們寫在紙上,長久以來這些基于許多經(jīng)驗的觀點一直積累在我的頭腦中。因此希望這些觀點能幫助你們,了解如何規(guī)劃一個程序的細節(jié)。(我還沒有看到過一篇講關(guān)于如何規(guī)劃整個事情的好文章,不過這部分可以是課程的一部分)要是能發(fā)現(xiàn)它們的特質(zhì),那很好;要是不認(rèn)同的話,那也很好。但如果能啟發(fā)你們思考為什么不認(rèn)同,那樣就更好了。在任何情況下,都不應(yīng)該照搬我所說的方式進行編程;要用你認(rèn)為最好的編程方式來嘗試完成程序。請一以貫之而且毫不留情的這么做。
01、排版問題
程序是一種出版物。意味著程序員們會先閱讀(也許是幾天、幾周或幾年后的你自己閱讀),最后才輪到機器。機器的快樂就是程序能編譯,機器才不在乎程序?qū)懙挠卸嗝雌粒墒侨藗儜?yīng)該保持程序的美觀。有時人們會過度關(guān)心:用漂亮的打印機呆板地打印出漂亮的輸出,而這些輸出只是將所有介詞用英文文本以粗體字體凸顯出來,都是些與程序無關(guān)的細節(jié)。雖然有很多人認(rèn)為程序就應(yīng)該像 Algol.68 所描述的一樣(有些系統(tǒng)甚至要求照搬該風(fēng)格編寫程序),可清晰的程序不會因為這樣的呈現(xiàn)而變得更清晰,只會使糟糕的程序變得更可笑。02、變量命名
對于變量名稱,長度并不是名稱的價值所在,清晰的表達才是。不常用的全局變量可能會有一個很長的名稱,像 maxphysaddr。在循環(huán)中每一行所使用的數(shù)組索引,并不需要取一個比 i 更詳盡的名字。取 index 或者 elementnumber 會輸入更多的字母(或調(diào)用文本編輯器),并且會遮蓋住計算的細節(jié)。當(dāng)變量名稱很長時,很難明白發(fā)生了什么。現(xiàn)實例子中的問題會變得更糟。所以僅需把索引當(dāng)成符號來對待。指針也需要合理的符號。np 僅僅只是作為指針 nodepointer 的助記符。如果一貫都遵從命名規(guī)范,那么很容易就能推斷出 np 表示“節(jié)點指針”。在下一篇文章中會提到更多。03、指針的使用
C語言不同尋常,因為它允許指針指向任何事物。指針是鋒利的工具,像任何這樣的工具一樣,使用得當(dāng)可以產(chǎn)生令人愉悅的生產(chǎn)力,但使用不當(dāng)也可以造成極大的破壞。指針在學(xué)術(shù)界的名聲不太好,因為它太危險了,莫名其妙地就變得糟糕的不行。但我認(rèn)為它是強大的符號,它可以幫助我們清楚地自我表達。1、過程名稱
過程名稱應(yīng)該表明它們是做什么的,函數(shù)名稱應(yīng)該表明它們返回什么。函數(shù)通常在像 if 這樣的表達式使用,因此可讀性要好。2、注釋
這一個微妙的問題,需要自己體會和判斷。由于一些原因,我傾向于寧可清除注釋。第一,假如代碼清晰,并且使用了規(guī)范的類型名稱和變量名稱,應(yīng)該從代碼本身就可以理解。第二,編譯器不能檢查注釋,因此不能保證準(zhǔn)確,特別是代碼修改過以后。誤導(dǎo)性的注釋會非常令人困惑。第三,排版問題:注釋會使代碼變得雜亂。3、復(fù)雜度
許多程序過于復(fù)雜,比需要有效解決的問題更加復(fù)雜。這是為什么呢?大部分是由于設(shè)計不好,但我會跳過這個問題,因為這個問題太大了。然而程序往往在微觀層面就很復(fù)雜,有關(guān)這些可以在這里解決。
規(guī)則 1:不要斷定程序會在什么地方耗費運行時間。瓶頸總是出現(xiàn)在令人意想不到的地方,直到證實瓶頸在哪,不要試圖再次猜測并加快運行速度。
規(guī)則 2:估量(measure) 在沒有對代碼做出估量之前不要優(yōu)化速度,除非發(fā)現(xiàn)最耗時的那部分代碼,要不也不要去做。
規(guī)則 3:當(dāng) n 很小時(通常也很小),花哨的算法運行很慢。花哨算法有很大的常數(shù)級別復(fù)雜度。在你確定 n 總是很大之前, 不要使用花哨算法。(即使假如 n 變大,也優(yōu)先使用規(guī)則 2).例如,對于常見問題,二叉樹總比伸展樹高效。
本文由培訓(xùn)無憂網(wǎng)達內(nèi)教育課程顧問老師整理發(fā)布,更多課程信息可關(guān)注C語言培訓(xùn)或添加老師微信:15033336050
注:尊重原創(chuàng)文章,轉(zhuǎn)載請注明出處和鏈接 http://www.hebeijilong.cn/news-id-5923.html 違者必究!部分文章來源于網(wǎng)絡(luò)由培訓(xùn)無憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實性請自行核實或聯(lián)系我們,了解更多相關(guān)資訊請關(guān)注c語言頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費申請試課。關(guān)注官方微信了解更多:150 3333 6050