成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

初學者必看:如何為代碼編寫基本的文檔

開發(fā) 前端
程序員只需要在每個函數(shù)(或者類)開始之前加上一段特殊格式的注釋,然后就可以用專門的工具掃描整個代碼樹然后轉(zhuǎn)換成按照架構(gòu)組織好的(帶有多種目錄,甚至還可以搜索)html或pdf文檔。

事先聲明一下,這篇文章是為完全沒有任何文檔編寫經(jīng)驗,并且正在使用Visual Studio的同學們準備的,不一定適用于老鳥以及其他IDE愛好者 :-)

Ok, alpha版本的一個嚴重的問題便是,我們沒有任何的文檔積累;所以在Beta版本的開發(fā)中,PM準備徹底消滅這種無文檔的編碼風格。

既然要讓大家寫文檔,那么總該有個文檔規(guī)范吧!理論性的東西我就不多講了,這里我就講一個“南七規(guī)范”——簡單實用,不用費腦子。

南七規(guī)范 v1.0

不知道提到“文檔”,同學們首先會想到什么東西——不過我估計大概是這樣的風格——工程里面有一個doc目錄,然后里面有各種不同開發(fā)人員維護的xxx.txt文件(或者微軟式xxx.doc);誠然,有很多工程的文檔組織形式就是這樣的,但是這樣做也有缺點,就是文檔可能一旦被寫出來就落后于代碼了——離代碼太遠。還有一點就是分開維護的文檔可能覆蓋面太窄——代碼中會出現(xiàn)很多沒有在文檔中提到的方法。

所以在這里向大家介紹另外一種維護文檔的方法——注釋法(名字是我自己發(fā)明的,不要打我)。意思是說,程序員只需要在每個函數(shù)(或者類)開始之前加上一段特殊格式的注釋,然后就可以用專門的工具掃描整個代碼樹然后轉(zhuǎn)換成按照架構(gòu)組織好的(帶有多種目錄,甚至還可以搜索)html或pdf文檔。

這種方法的優(yōu)點在于,當一個方法被重構(gòu)的時候,程序員可以輕而易舉地修改文檔,做到二者同步,而且如果保持每天都把文檔給Build出來的話,可讀性又很高。

我們的南七規(guī)范規(guī)定——必須給每個函數(shù)加上文檔,所以在每個函數(shù)前面,都必須寫一份注釋。

上個例子吧。

  1. ///<summary> 
  2.     /// Initialize the resources, and starts a new game.  
  3.     ///</summary> 
  4.     ///<param name="songID">The ID of selected song.<remarks>The track selector should make sure  
  5.     /// that this id is within [0..SongCount-1], otherwise the game will crash.</remarks></param> 
  6.     ///<param name="level">The difficulty level, cound be 0(easy) or 1(hard)</param> 
  7.  
  8.     void StartGame(int songID,int level)  
  9.     {  
  10.         SoundGame.gps = new GamePlayScreen();  
  11.         SoundGame.gps.Layer = 1;  
  12.         GamePlayScreen.selectedSongID = songID;  
  13.         GamePlayScreen.selectedSongLevel = level;  
  14.         GamePlayScreen.startGameTime = TimeSpan.FromSeconds(-2);  
  15.         ScreenManager.AddScreen(SoundGame.gps, null);  
  16.         SoundGame.gps.InitializeGameLoop();  
  17.     } 

注意代碼上面的那段注釋,特殊之處在于普通注釋都是兩道杠,這個文檔注釋是三道杠,盡顯尊貴。看到這里大家可能會說,麻煩!我告訴你,一點都不麻煩,只要你是在使用Visual Studio,那么你把光標停在函數(shù)頭的前面,按一個三道杠——啪,自動補出來了,剩下的工作就是往里面填入內(nèi)容而已!

聰明的同學們可能已經(jīng)觀察出來了——三道杠里面套的不就是一些XML形式的結(jié)構(gòu)么?(再不明白的話,就像HTML一樣)于是就挨個填內(nèi)容吧——下面來幾個裸按三道杠補出來的樣板做示范——

  1. ///<summary> 
  2.        ///   
  3.        ///</summary> 
  4.        ///<param name="position"></param> 
  5.        ///<param name="tag"></param> 
  6.        private void AddButton(Rectangle position,int tag)  
  7.        {  
  8.            TransparentButton tbutton = new TransparentButton(position,tag, this);  
  9.            buttonList.Add(tbutton);  
  10.        } 

這便是在任意一個函數(shù)前面按下三道杠之后自動補全的結(jié)果。可以看到整個XML結(jié)構(gòu)分為兩個部分,一個叫summary,另一個是一堆param。

summary部分是對這個函數(shù)的作用,行為的描述,我的建議是,這里的描述要像說明書一樣——你在寫注釋的時候就要假設有個十萬個為什么正在問你,這個函數(shù)應該怎么用,輸入什么,吐出來什么,副作用是什么——但是不要牽扯到太多內(nèi)部實現(xiàn)的細節(jié)——什么把XXX對象加入到_YYY隊列中——這明顯不是說明書應該做的事情,要想弄清楚這些事情,最好的方式是讀代碼(相信我,這種情況下看代碼比看注釋清楚又高效)

于是我們?yōu)锳ddButton函數(shù)填入如下文檔:

  1. ///<summary> 
  2.        /// Register a button to the system, so that it will be displayed and handled on the game screen.  
  3.        ///</summary> 
  4.        ///<param name="position">The position description rectangle of the button.</param> 
  5.        ///<param name="tag">The global-unique ID of the button.</param> 
  6.        private void AddButton(Rectangle position,int tag)  
  7.        {  
  8.            TransparentButton tbutton = new TransparentButton(position,tag, this);  
  9.            buttonList.Add(tbutton);  
  10.        } 

接下來再來看一份糟糕一點的文檔:

  1. ///<summary> 
  2.       /// Add a TransparentButton to the buttonList  
  3.       ///</summary> 
  4.       ///<param name="position">Position.</param> 
  5.       ///<param name="tag">The tag of the button.</param> 
  6.       private void AddButton(Rectangle position,int tag)  
  7.       {  
  8.           TransparentButton tbutton = new TransparentButton(position,tag, this);  
  9.           buttonList.Add(tbutton);  
  10.       } 

為什么說它糟糕?第一,它有很多內(nèi)部實現(xiàn),現(xiàn)在看著代碼可能感覺不出來,但是當這份文檔最終編譯成pdf之后就能體會到這種痛苦了——文檔閱讀者根本不明白你在說什么(否則為什么他不直接去看代碼呢?)第二,定義不清晰——用Position解釋Position是廢話;"The tag of the button"最終沒有解釋Tag是個什么玩意。

希望這樣介紹一下能讓同學們明白好的文檔和差的文檔有什么區(qū)別。 :-)

另外補充一點,XML結(jié)構(gòu)的文檔實際上是可以嵌套的,例如你可以在summary里面嵌套code

  1. ///<summary> 
  2. ///請看代碼  
  3. ///<code> 
  4. /// 床前明月光();  
  5. /// 疑是地上霜();  
  6. /// 舉頭望明月();  
  7. /// 低頭思故鄉(xiāng)();  
  8. ///<code/> 
  9. ///</summary> 

等等,具體你在三道杠內(nèi)部打一個<然后能夠用的東西就會被補全出來了。注意這里嵌套的結(jié)構(gòu)實際上的作用是對格式進行指定,例如段會用等寬字體,等等。

原文:http://www.cnblogs.com/southseven/archive/2011/11/07/2239555.html

Ok,ok finally假設大家都這樣去寫碼了,接下來怎么辦?這里簡單提一下一個叫doxygen的開源工具。doxygen正是前文提到的那個能自動掃描代碼樹并且生成html或者latex(于是就可以編譯成pdf)文檔的工具,這個工具太出名了,以至于隨便放狗一搜就能得到其使用方法,這里我就不多講了。 :-) 總之就這樣幾個步驟——1. doxygen -g得到一個配置文件樣本 2.稍微修改一下,例如是否遞歸找文件 3.doxygen doxyFile 4.驗收你的漂亮的文檔網(wǎng)頁或者PDF。

責任編輯:陳貽新 來源: SouthSeven的博客
相關推薦

2011-09-08 10:38:37

Widget

2011-09-16 09:38:19

Emacs

2011-08-04 18:01:07

IOS Cocoa Touc

2011-08-02 14:48:04

IOS 多任務

2011-08-10 16:44:56

iPhone代理設計模式

2011-09-14 09:49:41

Android開發(fā)

2011-06-17 14:12:32

Qt

2011-06-17 15:06:14

Qt

2011-08-24 17:05:01

Lua

2011-06-17 15:32:28

Qt

2011-06-17 14:29:55

Qt

2013-04-23 10:51:15

Linux壓縮

2011-06-17 14:41:56

Qt

2011-06-17 15:19:28

Qt

2011-06-17 15:25:18

Qt

2011-06-17 15:37:42

Qt

2011-06-17 15:44:25

Qt

2011-06-17 14:54:31

Qt

2011-07-27 10:02:12

iPhone Framework

2020-08-04 08:42:10

Python開發(fā)工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频综合 | 亚洲第一区国产精品 | 欧美一区二区久久 | 亚洲欧美日本在线 | 自拍偷拍亚洲一区 | 99视频在线看 | 久久久蜜桃一区二区人 | 天天色av | 97caoporn国产免费人人 | 国产精品免费大片 | 欧美成人一级 | 欧美精| 一区二区三区四区av | 色久伊人 | 久草免费视 | 久久久久久久久99 | 一区二区免费 | 日本 欧美 三级 高清 视频 | 成人不卡在线 | 欧美日韩在线免费 | 欧美一区日韩一区 | 三级黄色片在线观看 | 欧美午夜精品久久久久久浪潮 | 国色天香成人网 | 国产无人区一区二区三区 | 99re在线视频 | 超碰电影| 亚洲精品国产成人 | 在线欧美一区二区 | 国产精品免费一区二区三区四区 | re久久 | 久精品久久 | 亚洲精品久久久蜜桃 | 一区二区三区av | 精品久久久久久久久久久下田 | 国产无套一区二区三区久久 | 免费看一区二区三区 | 在线视频亚洲 | 亚洲免费福利视频 | 在线欧美一区二区 | 欧美一级艳情片免费观看 |