① NLP第九篇-句法分析
句法分析的基本任務是確定句子的 語法結構 或句子中 詞彙之間的依存關系 。句法分析不是一個自然語言處理任務的最終目標,但它往往是實現最終目標的關鍵環節。
句法分析分為 句法結構分析 和 依存關系分析 兩種。以獲取整個句子的句法結構為目的的稱為 完全句法分析 ,而以獲得局部成分為目的的語法分析稱為 局部分析 ,依存關系分析簡稱 依存分析 。
一般而言,句法分析的任務有三個:
判斷輸出的字元串是否屬於某種語言
消除輸入句子中詞法和結構等方面的歧義
分析輸入句子的內部結構,如成分構成、上下文關系等。
第二三個任務一般是句法分析的主要任務。
一般來說,構造一個句法分析器需要考慮兩部分工作:一部分是語法的形式化表示和詞條信息描述問題,形式化的語法規則構成了規則庫,詞條信息等由詞典或同義詞表等提供,規則庫與詞典或同義詞表構成了句法分析的知識庫;另一部分就是基於知識庫的解析演算法了。
語法形式化屬於句法理論研究的范疇,目前在自然語言處理中廣泛使用的是上下文無關文法(CFG)和基於約束的文法,後者又稱合一文法。
簡單的講,句法結構分析方法可以分為基於規則的分析方法和基於統計的分析方法兩大類。
基於規則的句法結構分析方法的基本思路是,由人工組織語法規則,建立語法知識庫,通過條件約束和檢查來實現句法結構歧義的消除。
根據句法分析樹形成方向的區別,人們通常將這些方法劃分為三種類型:自頂向下的分析方法,自底向上的分析方法和兩者相結合的分析方法。自頂向下分析演算法實現的是規則推導的過程,分析樹從根結點開始不斷生長,最後形成分析句子的葉結點。而自底向上分析演算法的實現過程恰好想法,它是從句子符號串開始,執行不斷規約的過程,最後形成根節點。
基於規則的語法結構分析可以利用手工編寫的規則分析出輸入句子所有可能的句法結構;對於特定領域和目的,利用有針對性的規則能夠較好的處理句子中的部分歧義和一些超語法(extra-grammatical)現象。
但對於一個中等長度的輸入句子來說,要利用大覆蓋度的語法規則分析出所有可能的句子結構是非常困難的,而且就算分析出來了,也難以實現有效的消歧,並選擇出最有可能的分析結果;手工編寫的規則帶有一定的主觀性,還需要考慮到泛化,在面對復雜語境時正確率難以保證;手工編寫規則本身就是一件大工作量的復雜勞動,而且編寫的規則領域有密切的相關性,不利於句法分析系統向其他領域移植。
基於規則的句法分析演算法能夠成功的處理程序設計語言的編譯,而對於自然語言的處理卻始終難以擺脫困境,是因為程序設計語言中使用的知識嚴格限制的上下文無關文法的子類,但自然語言處理系統中所使用的形式化描述方法遠遠超過了上下文無關文法的表達能力;而且人們在使用程序設計語言的時候,一切表達方式都必須服從機器的要求,是一個人服從機器的過程,這個過程是從語言的無限集到有限集的映射過程,而在自然語言處理中則恰恰相反,自然語言處理實現的是機器追蹤和服從人的語言,從語言的有限集到無限集推演的過程。
完全語法分析
基於PCFG的基本分析方法
基於概率上下文無關文法的短語結構分析方法,可以說是目前最成功的語法驅動的統計句法分析方法,可以認為是規則方法與統計方法的結合。
PCFG是CFG的擴展,舉個例子:
PCFG
當然,同一個符號不同生成式的概率之和為1。NP是名詞短語、VP是動詞短語、PP是介詞短語。
基於PCFG的句法分析模型,滿足以下三個條件:
位置不變性:子樹的概率不依賴於該子樹所管轄的單詞在句子中的位置
上下文無關性:子樹的概率不依賴於子樹控制范圍以外的單詞
祖先無關性:子樹的概率不依賴於推導出子樹的祖先節點
根據上述文法,『He met Jenny with flowers』有兩種可能的語法結構:
而且我們可以通過將樹中的所有概率相乘,得到兩棵子樹的整體概率,從中選擇概率更大的子樹作為最佳結構。
與HMM類似,PCFG也有三個基本問題:
給定一個句子W=w1w2…wn和文法G,如何快速計算概率P(W|G)
給定一個句子W=w1w2…wn和文法G,如何選擇該句子的最佳結構?即選擇句法結構樹t使其具有最大概率
給定PCFG G和句子W=w1w2…wn,如何調節G的概率參數,使句子的概率最大
首先是第一個問題,HMM中我們用的是前向演算法和後向演算法來計算觀察序列O概率,相似的,這里我們用的是內向演算法和外向演算法來計算P(W|G) 。
首先我們定義內向變數αij(A),與前向變數相似但又有不同,αij(A)即非終結符A推導出W中字串wiw(i+1)…wj的概率。那P(W|G)自然就等於α1n(S)了,S是起始符號,計算的就是由起始符號S推導出整個句子W=w1w2…wn的概率。
所以只要有αij(A)的遞歸公式就能計算出P(W|G),遞歸公式如下:
根據定義,αii(A)自然就等同於符號A輸出wi的概率;而αij(A)的計算思路是,這個子串wiw(i+1)…wj可以被切成兩部分處理,前一部分wiw(i+1)…wk由非終結符號B生成,後一部分wkw(k+1)…wj由非終結符號C生成,而BC由A生成。這樣將概率依次相乘,即可將一個大問題劃分為兩個小問題處理,兩個小問題又可以進一步劃分直到不能劃分為止,然後遞歸回來得到結果。
這里給一張內向變數計算方法示意圖:
這個問題也可以用外向演算法來解決。
首先定義外向變數,βij(A)是,初始符號S在推導出語句W=w1w2…wn的過程中,產生符號串w1w2…w(i-1)Aw(j+1)…wn的概率(隱含著A會生成wiw(i+1)…wj)。也就是說βij(A)是S推導出除了以A節點為根節點的子樹以外的其他部分的概率。
《統計自然語言處理(第二版)》這本書里講錯了,這里我給出我自己的理解,書里給的演算法步驟如下:
很明顯的錯誤,初始化都把結果初始化了,那這個演算法還算什麼,直接等於1就完了唄。
這是作者對外向變數定義理解模糊的問題,上面給了外向變數的定義,裡面有一句話『隱含著A會生成wiw(i+1)…wj』,那問題在於,A會生成wiw(i+1)…wj,這到底算是條件還是推論。
看這個演算法的初始化的意思,說β1n(A),在A=S的時候,為1,不等於S為0,意思是什麼?意思就是『隱含著A會生成wiw(i+1)…wj』這句話是條件,β1n(S)已經隱含了S生成W=w1w2…wn了,所謂的w1w2…w(i-1)Aw(j+1)…wn也就不存在了,只剩下一個S->S了,所以概率自然為1。
但是在第三步這個地方,作者理解成什麼意思了呢?作者又把『隱含著A會生成wiw(i+1)…wj』這句話當成推論了,認為在β1n(S),里S會生成W=w1w2…wn是推論,那真是就正好了,要求的結果就是S生成W=w1w2…wn,這不就結束了嗎,結果就導致了這個演算法第一步初始化都把結果初始化了。
那我的理解是什麼呢,通過這個公式計算出來的β1n(S),確實是正確的,意義實際上也是包含了『隱含著A會生成wiw(i+1)…wj』這句話是推論,但是右側式子里由於不斷遞歸而產生的β1n(S),是把『隱含著A會生成wiw(i+1)…wj』這句話當條件的,所以計算上沒有問題。
我傾向於為第三步中的β1n(S)加一個星號,以表明意義的不同。
書中還給了個外向變數的計算方法示意圖,我覺得也是莫名其妙:
他說βij(A)是這兩種情況的概率和,這我們知道j比i大,那這圖里這個k既比i小又比j大,這不是搞笑嗎。只能說圖上這倆C就不是一個C,k也不是一個k。
那我為什麼會理解成一個呢,除了字母相同,他前面還這么講『必定運用了形如B->AC或者B->CA的規則』、『運用B->AC或者B->CA兩種規則的情況』,這明顯就是給人以順序交換的誤解。
另外,還在內向變數的使用上前後不一,可以說這本書里對外向演算法的講解是非常失敗的。而且對外向演算法的計算仍然需要用到內向演算法的遞歸,那真的直接用內向演算法就好了,外向演算法還要多定義變數。
然後是第二個問題,選擇句子的最佳結構,也即給定一個句子W=w1w2…wn和文法G,
選定擁有最大概率的語法結構樹。這一問題與HMM中類似,仍然採用動態規劃的思想去解決。最後利用CYK演算法去生成擁有最大概率的語法結構樹。
第三個問題是給定PCFG G和句子W=w1w2…wn,如何調節G的概率參數,使句子的概率最大,與HMM相對的,PCFG這里採用的演算法名叫內外向演算法。與前後向演算法相同,也屬於一種EM演算法,其基本思想是,首先給G的產生式隨機地賦予一個概率值(滿足歸一化條件),得到文法G0,然後根據G0和訓練數據,可以計算出每條規則使用次數的期望值,用期望值進行最大似然估計,得到語法G的新參數值,新的語法記作G1,然後循環執行該過程,G的參數概率將收斂於最大似然估計值。
PCFG只是一種特殊的上下文無關文法模型,根據PCFG的模型和句子,具體去對句子做語法分析,生成語法結構樹,靠的是還是CYK演算法。CYK演算法是一個用來判定任意給定的字元串W是否屬於一個上下文無關文法的演算法。
基於PCFG的句法分析模型存在有許多問題,比如因為PCFG沒有對詞彙進行建模,所以存在對詞彙信息不敏感的問題。因此人們提出了詞彙化的短語結構分析器,有效的提升了基於PCFG的句法分析器的能力。
而且,我們上面也提到了PCFG的三個獨立性假設,這也導致了規則之間缺乏結構依賴關系(就像HMM的三個假設也不完全合理一樣),而在自然語言中,生成每個非終結符的概率往往是與其上下文結構有關系的,所以有人提出了一種細化非終結符的方法,為每個非終結符標註上其父節點的句法標記信息。
D. Klein提出了帶有隱含標記的上下文無關文法(PCFG with latent annotations,PCFG-LA),使得非終結符的細化過程可以自動進行,並且在使用EM演算法優化時,為避免到達局部最優,對其進行了改進,提出了一種層次化的『分裂-合並』策略,以期獲取一個准確並且緊湊的PCFG-LA模型。基於PCFG-LA的Berkeley Parser作為非詞彙化句法分析器的代表,無論是性能表現還是運行速度,都是目前開源的短語結構分析器中最好的。其語法樹如下圖:
普通句法樹與PCFG-LA句法樹對照實例
這個x就是隱含標記,xi的取值范圍一般是人為設定的,一般取1~16之間的整數。而且PCFG-LA也類似於HMM模型,原始非終結符對應HMM模型中的觀察輸出,而隱含標記對應HMM模型中的隱含狀態。
淺層語法分析(局部語法分析)
由於完全語法分析要確定句子所包含的全部句法信息,並確定句子中各成分之間的關系,這是一項十分苦難的任務。到目前為止,句法分析器的各方面都難以達到令人滿意的程度,為了降低問題的復雜度,同時獲得一定的句法結構信息,淺層句法分析應運而生。
淺層語法分析只要求識別句子中的某些結構相對簡單的獨立成為,例如非遞歸的名詞短語、動詞短語等,這些被識別出來的結構通常稱為語塊(chunk)。
淺層句法分析將句法分析分解為兩個主要子任務,一個是語塊的識別和分析,另一個是語塊之間的依附關系分析。其中,語塊的識別和分析是主要任務。在某種程度上說,淺層句法分析使句法分析的任務得到了簡化,同時也有利於句法分析系統在大規模真實文本處理系統中迅速得到應用。
基本名詞短語(base NP)是語塊中的一個重要類別,它指的是簡單的、非嵌套的名詞短語,不含有其他子項短語,並且base NP之間結構上是獨立的。示例如下:
base NP識別就是從句子中識別出所有的base NP,根據這種理解,一個句子中的成分和簡單的分為baseNP和非base NP兩類,那麼base NP識別就成了一個分類問題。
base NP的表示方法有兩種,一種是括弧分隔法,一種是IOB標注法。括弧分隔法就是將base NP用方括弧界定邊界,內部的是base NP,外部的不屬於base NP。IOB標注法中,字母B表示base NP的開端,I表示當前詞語在base NP內,O表示詞語位於base NP之外。
基於SVM的base NP識別方法
由於base NP識別是多值分類問題,而基礎SVM演算法解決的是二值分類問題,所以一般可以採用配對策略(pairwise method)和一比其餘策略(one vs. other method)。
SVM一般要從上下文的詞、詞性、base NP標志中提取特徵來完成判斷。一般使用的詞語窗口的長度為5(當前詞及其前後各兩個詞)時識別的效果最好。
基於WINNOW的base NP識別方法
WINNOW是解決二分問題的錯誤驅動的機器學習方法,該方法能從大量不相關的特徵中快速學習。
WINNOW的稀疏網路(SNoW)學習結構是一種多類分類器,專門用於處理特徵識別領域的大規模學習任務。WINNOW演算法具有處理高維度獨立特徵空間的能力,而在自然語言處理中的特徵向量恰好具有這種特點,因此WINNOW演算法也常用於詞性標注、拼寫錯誤檢查和文本分類等等。
簡單WINNOW的基本思想是,已知特徵向量和參數向量和實數閾值θ,先將參數向量均初始化為1,將訓練樣本代入,求特徵向量和參數向量的內積,將其與θ比較,如果大於θ,則判定為正例,小於θ則判定為反例,將結果與正確答案作比較,依據結果來改變權值。
如果將正例估計成了反例,那麼對於原來值為1的x,把它的權值擴大。如果將反例估計成了正例,那麼對於原來值為1的x,把它的權值縮小。然後重新估計重新更改權重,直到訓練完成。
這其實讓我想到了LR演算法,因為LR演算法也是特徵向量與參數向量的內積,最後將其送到Sigmoid函數中去拿到判定結果,然後大於0.5的為正例,小於0.5的為反例,實際上只要反過來,Sigmod函數輸出0.5時候的輸入就是WINNOW演算法里的那個實數閾值θ。但是區別在於WINNOW演算法只判定大小,不判定概率,而LR利用Sigmoid函數給出了概率。LR利用這給出的概率,通過使訓練集的生成概率最大化來調整參數,而WINNOW則是直接樸素的錯誤情況來增大或縮小相關參數。目測LR因為使用了梯度下降,它的收斂速度要快於WINNOW,而WINNOW的優勢則在於可以處理大量特徵。
基於CRF的base NP識別方法
基於CRF的base NP識別方法擁有與SVM方法幾乎一樣的效果,優於基於WINNOW的識別方法、基於MEMM的識別方法和感知機方法,而且基於CRF的base NP識別方法在運行速度上較其他方法具有明顯優勢。
依存語法理論
在自然語言處理中,我們有時不需要或者不僅僅需要整個句子的短語結構樹,而且要知道句子中 詞與詞之間的依存關系 。用詞與詞之間的依存關系來描述語言結構的框架成為依存語法,又稱從屬關系語法。利用依存語法進行句法分析也是自然語言理解的重要手段之一。
有人認為,一切結構語法現象可以概括為關聯、組合和轉位這三大核心。句法關聯建立起詞與詞之間的從屬關系,這種從屬關系由 支配詞 和 從屬詞 聯結而成, 謂語中的動詞是句子的中心並支配別的成分,它本身不受其他任何成分支配 。
依存語法的本質是一種結構語法,它主要研究以謂詞為中心而構句時由深層語義結構映現為表層語法結構的狀況及條件,謂詞與體詞之間的同現關系,並據此劃分謂詞的詞類。
常用的依存於法結構圖示有三種:
計算機語言學家J. Robinson提出了依存語法的四條公理:
一個句子只有一個獨立的成分
句子的其他成分都從屬於某一成分
任何一個成分都不能依存於兩個或兩個以上的成分
如果成分A直接從屬於成分B,而成分C在句子中位於A和B之間,那麼,成分C或者屬於成分A,或者從屬於B,或者從屬於A和B之間的某一成分。
這四條公理相當於對依存圖和依存樹的形式約束:單一父節點、連通、無環和可投射,由此來保證句子的依存分析結果是一棵有根的樹結構。
這里提一下可投射,如果單詞之間的依存弧畫出來沒有任何的交叉,就是可投射的(參考上面的兩個有向圖)。
為了便於理解,我國學者提出了依存結構樹應滿足的5個條件:
單純結點條件:只有終結點,沒有非終結點
單一父結點條件:除根節點沒有父結點外,所有的結點都只有一個父結點
獨根結點條件:一個依存樹只能有一個根結點,它支配其他結點
非交條件:依存樹的樹枝不能彼此相交
互斥條件:從上到下的支配關系和從左到右的前於關系之間是相互排斥的,如果兩個結點之間存在著支配關系,它們就不能存在於前於關系
這五個條件是有交集的,但它們完全從依存表達的空間結構出發,比四條公理更直觀更實用。
Gaifman 1965年給出了依存語法的形式化表示,證明了依存語法與上下文無關文法沒有什麼不同..
類似於上下文無關文法的語言形式對被分析的語言的投射性進行了限制,很難直接處理包含非投射現象的自由語序的語言。20世紀90年代發展起來了約束語法和相應的基於約束滿足的依存分析方法,可以處理此類非投射性語言問題。
基於約束滿足的分析方法建立在約束依存語法之上,將依存句法分析看做可以用約束滿足問題來描述的有限構造問題。
約束依存語法用一系列形式化、描述性的約束將不符合約束的依存分析去掉,直到留下一棵合法的依存樹。
生成式依存分析方法、判別式依存分析方法和確定性依存分析方法是數據驅動的統計依存分析中具有代表性的三種方法。
生成性依存分析方法
生成式依存分析方法採用聯合概率模型生成一系列依存語法樹並賦予其概率分值,然後採用相關演算法找到概率打分最高的分析結果作為最後輸出。
生成式依存分析模型使用起來比較方便,它的參數訓練時只在訓練集中尋找相關成分的計數,計算出先驗概率。但是,生成式方法採用聯合概率模型,再進行概率乘積分解時做了近似性假設和估計,而且,由於採用全局搜索,演算法的復雜度較高,因此效率較低,但此類演算法在准確率上有一定優勢。但是類似於CYK演算法的推理方法使得此類模型不易處理非投射性問題。
判別式依存分析方法
判別式依存分析方法採用條件概率模型,避開了聯合概率模型所要求的獨立性假設(考慮判別模型CRF舍棄了生成模型HMM的獨立性假設),訓練過程即尋找使目標函數(訓練樣本生成概率)最大的參數θ(類似Logistic回歸和CRF)。
判別式方法不僅在推理時進行窮盡搜索,而且在訓練演算法上也具有全局最優性,需要在訓練實例上重復句法分析過程來迭代參數,訓練過程也是推理過程,訓練和分析的時間復雜度一致。
確定性依存方法
確定性依存分析方法以特定的方向逐次取一個待分析的詞,為每次輸入的詞產生一個單一的分析結果,直至序列的最後一個詞。
這類演算法在每一步的分析中都要根據當前分析狀態做出決策(如判斷其是否與前一個詞發生依存關系),因此,這種方法又稱決策式分析方法。
通過一個確定的分析動作序列來得到一個唯一的句法表達,即依存圖(有時可能會有回溯和修補),這是確定性句法分析方法的基本思想。
短語結構與依存結構之間的關系
短語結構樹可以被一一對應地轉換成依存關系樹,反之則不然。因為一棵依存關系樹可能會對應多棵短語結構樹。
② c語言里:sizeof怎樣用法
1、首先打開VS,新建一個 使用sizeof求出數組的大小 project。
③ 程序員的搞笑表白情書
在電腦的世界裡, 0與1是相當奇妙的東西。沒想到在愛情的世界裡, 0與1也是同樣的道理。
自從見到了你, 我的愛情旗標立刻變成了 1。
雖然只是短短的一聚, 心中的振盪器卻再也無法平息。
每節上課, 我就變成一台多工的機器。
因為想你, 使得 CpU load 總無法降低。
每次考試, 我就變成一條不穩定的 Memory。
因為念你, 使得 parity Check 總無法 Error Free。
想對你說的話, 即使是 Giga 級的哈滴也不夠記。
只好期盼, 我會擁有一台可讀寫的光碟機。
多麼希望我們之間, 只有磁頭和磁碟的距離。
也希望你是我生命中的 Cache, 不要再讓我苦苦尋覓。
每次想打電話給你, 我總是在矛盾中猶疑。
我在你心中的 priority, 到底是怎麼樣的等級想對你表明心意, 卻又害怕遭遇 Deadlock 的打擊。
你我之間, 是否有 Algorithm 可來處理這種微妙的關系愛情是場如真似幻的夢境, 沒有一定的軌跡。
思想中的邏輯與定理, 在愛情中也無用武之地。
原來, 這就是為什麼世間的男女總在互猜心意。
告訴我, 我們之間的愛情到底是 0 或是 1
你對我說, 我們之間的一切沒有離散數學中的交集。
我回答說, 你沒用過線性代數中的對角矩陣, 又怎知數年後的推移但畢竟這一切已成定局, 終究造成了我們的別離。
在逐漸模糊的身影後, 我忍不住流下了淚。
經營一段愛情, 並不像安裝 Linux 那麼容易。
縱有 patch 程式, 又如何修補那段支離破碎的記憶。
指向地久天長的指標, 到最後總有一場 Null 的游戲。
可嘆紅塵痴情眾生, 又有多少能夠比翼
資料結構中的 AVL Tree, 據說在搜尋方面非常夠力。
但即使能在 log n 的時間內找到你, 也不再具有任何意義。
只好將這段情, 深深的埋藏在心底。
靜待多年之後, 再細細的回憶。。。
寥寥代碼中,命運註定良緣.
當編譯開始,我們齊手共建
--中國軟體的春天!
雖然我們是不同的對象,都有隱私的一面,
但我相信你會找到我的介面,把我的最真給你看!
因為我是你的指針,在茫茫內存的堆棧中,
永遠指向你那片天空,不孜不倦!
我願做你的內聯,供你無限次的調用,直到海枯石爛!
我願做你的引用,和你同進退共生死,一起經受考驗!
只是我不願苦苦地調試你的心情,最終淪為你的友元!
而我更不願始亂終棄,刪不清借你用的空間,
最後一拍兩散,搞得內存混亂...
如今我們已被MFC封裝--事事變遷!
如今我們已向COM走去--可想當年!
作為一個真正的程序員,首先應該尊重編程,熱愛你所寫下的程序,他是你的夥伴,而不是工具。下面是關於程序員勵志語錄的內容,歡迎閱讀!
1、永不放棄,永不放棄又有兩個原則,第一個原則是永不放棄,第二個原則就是:當你想放棄時回頭看第一個原則。
2、非優秀的程序員常常把空間和時間消耗殆盡,優秀的程序員則總是有足夠的空間和時間去完成編程任務,而且配合近乎完美。
3、這句話不是很文雅,徹底鄙視那些害怕別人超越自己而拒絕回答別人問題的程序員。
4、你比他好一點,他不會承認你,反而會嫉妒你,只有你比他好很多,他才會承認你,然後還會很崇拜你,所以要做,就一定要比別人做得好很多。
5、每一個問題都是一把鎖,你要相信世界上一定有一把鑰匙能打開這把鎖,你也能找到這把鑰匙。
6、內存無論在怎麼發展,它都會有一個容量的限制。因此你應該堤防著它。你的程序如果導致內存泄漏,是程序員很可恥的事情。
7、當你想在你的代碼中找到一個錯誤時,這很難;當你認為你的代碼是不會有錯誤時,這就更難了。
8、用代碼行數來測評軟體開發進度,就相對於用重量來計算飛機建造進度。
9、初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是只對部分功能熟悉而已,不系統還是不夠的。
10、當你用腳本到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將餘下的部分粗略的完成以保證這個代碼的完整性,然後分析自己的錯誤並重新編寫和工作。
11、真正的程序員的程序不會在第一次就正確運行,但是他們願意守著機器進行若干個30小時的調試改錯。
12、一匹真正的好馬,即使在鞭子的影子下,也能飛奔。
13、一個人靜靜坐在電腦面前寫代碼的感覺,那是什麼感覺?那是武林高手閉關修煉的感覺。
14、人吶,眼光放得長遠一些,看到的東西也會多一些,生活也就會過得更有意義一點。
15、真正的程序員不畫流程圖,原始人和文盲才會干這事兒。
16、看幫助,不要因為很難而自己是初學者所以就不看;幫助永遠是最好的參考手冊,雖然幫助的文字有時候很難看懂,總覺得不夠直觀。
17、優秀的判斷力來自經驗,但經驗來自於錯誤的判斷。
18、程序中蘊含著很多的道理,唯有大徹大悟者方能體會其中的奧妙。
19、如果建築工人蓋房子的方式跟程序員寫程序一樣,那第一隻飛來的啄木鳥就將毀掉人類文明。
20、真正的程序員不看參考手冊,新手和膽小鬼才會看。
21、程序是我的生命,但我相信愛她甚過愛我的生命。
22、別心急,寫腳本確實不容易;水平是在不斷的實踐中完善和發展的。
23、知道一點東西,並不能說明你會寫腳本,腳本是需要經驗積累的。
24、看得懂的書,請仔細看;看不懂的書,請硬著頭皮看。
25、我們應該重視團隊的精神,一個人作用再大,也不過是一碗水中比較大的一粒水珠而已。
26、程序員,他們想的是什麼?他們想的永遠都是技術,他們崇尚的也永遠都是技術。
27、真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。
28、程序員可以讓步,卻不可以退縮,可以羞澀,卻不可以軟弱,總之,程序員必須是勇敢的。
29、真正的程序員不接受團隊開發的理念,除非他自己是頭頭。
30、真正的程序員沒有進度表,只要討好領導的馬屁精才有進度表,真正的程序員會讓領導提心吊膽。
31、編程中我們會遇到多少挫折?表放棄,沙漠盡頭必是綠洲。
32、不要被對象、屬性、方法等詞彙所迷惑;最根本的是先了解最基礎知識。
33、把在書中看到的有意義的例子擴充;並將其切實的運用到自己的工作中。
34、我們這個世界的一個問題是,蠢人信誓旦旦,智人滿腹狐疑。
35、無私奉獻不是天方夜譚,有時候,我們也可以做到。
36、如果你喜歡底層開發,千萬不要勉強自己去搞VC,找到你最真實的想法,程序員最不能忍受的就是萬精油。
37、調試完一個動態連接函數,固然值得興奮,但真正的成功遠還在無數個函數之後。
38、設計是一個發現問題、而不是發現解決方案的過程。
39、就算我們站在群山之顛,也別忘記雄鷹依舊能從我們頭頂飛過。驕傲是比用Java進行底層開發更可笑的東西。
40、一本好書,就像高級武功秘籍一樣,哪怕只是從裡面領悟到個一招半勢,功力提升起來都是驚人的。
41、不要看到別人的回復第一句話就說:給個代碼吧!你應該想想為什麼。當你自己想出來再參考別人的提示,你就知道自己和別人思路的差異。
42、真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當然也很難讀。
43、任何傻瓜都能寫出計算機可以理解的代碼。好的程序員能寫出人能讀懂的代碼。
44、做技術一定要一顆恆心,這樣才不會半途而廢。
45、如果調試一個程序讓你很苦惱,千萬不要放棄,成功永遠在拐角之後,除非你走到拐角,否則你永遠不知道你離他多遠,所以,請記住,堅持不懈,直到成功。
46、你的一個程序有時正常有時不正常,而你已經完全遵循編程的規則,為什麼?事實上我認為相信只要遵循別人所說就能得到想當然的結果的人其實是個傻瓜。
47、對於問題的理解,一定要透徹。這樣你才能實質的解決問題。
48、編程是一種單調的生活,因此程序員比普通人需要更多的關懷,更多的友情。
49、對程序員來說大部分的快樂是從解決問題,特別是獨立解決問題中獲得,而不是從這個CASE有多大,獎金有多少中獲得。
50、有兩種方法能寫出沒有錯誤的程序;但只有第三種好用。
51、其實你找不到錯誤不代表錯誤不存在,同樣你看不到技術比你牛的人並不代表世界上沒有技術比你牛的人。
52、你要麼要軟體質量,要麼要指針演算法;兩者不可兼得。
53、一個人靜靜坐在電腦面前寫代碼的感覺,那是什麼感覺?是武林高手閉關修煉的感覺。
54、理想如果不向現實做一點點屈服,那麼理想也將歸於塵土。
55、沒有情調,不懂浪漫,也許這是程序員的一面,但擁有朴實無華的愛是他們的另一面。
56、如果你沒有把握做到,最好就不要承諾,你什麼也不承諾,至少別人不會看不起你。
57、『理論』是你知道是這樣,但它卻不好用。『實踐』是它很好用,但你不知道是為什麼。程序員將理論和實踐結合到一起:既不好用,也不知道是為什麼。
58、請把書上的例子親手到電腦上實踐,即使配套光碟中有源文件。
59、程序員是值得尊敬的,程序員的雙手是魔術師的雙手,他們把枯燥無味的代碼變成了豐富多彩的軟體。
60、把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡。
1.在那辦公室里電腦面前有一群程序員,他們沉默又靦腆,他們聰明但沒錢。他們一天到晚辛辛苦苦拚命寫軟體,如果累了就咬倒在沙發上睡!哦苦命的程序員,哦苦命的程序員,只要老闆不滿意他們就要重新搞一遍,但是期限只剩下最後的一天。
2.在你的資料庫里添些快樂的元素,給你的符號欄里加些如意字元,為你的人生下載好運軟體,在你的心間上傳幸福無限,程序員節,願你笑口常開,日子甜甜。
3.一個鍵盤一根網線你便能打下一片天下,幾個字母一些數字你便能創造輝煌人生,一個指令一次回車你便能成就世界,程序員節到了,復制一份快樂給你,粘貼一堆幸福送你,保存一世如意給你,願你開心永在。
4.一台電腦,一個鍵盤,盡情揮灑智慧的人生;幾行數字,幾個字母,認真編寫生活的美好;一個靈感,一段程序,推動科技進步,促進社會發展。程序員節,用心編寫程序,用智慧照亮人生!
5.「咳嗽、貧窮和愛」,無法編程,不能隱瞞,你想隱瞞,卻欲蓋彌彰;「身體、金錢和愛」,無法編程,不能揮霍,你想揮霍,卻得不償失;「生命、時間和愛」,無法編程,不能挽留,你想挽留,卻漸行漸遠;程序員節,願你把「珍惜、呵護和愛」編入人生程序,幸福快樂就會永遠把你伴隨!
6.點擊開快樂的界面,編寫下幸福的程序,好運就在你運算的腦海里,成功就在你敲擊的雙手中。程序員節,我把祝福編輯,願你把吉祥安康永遠保存!
7.冷靜的思維,點亮智慧的殿堂;抽象的理念,交匯靈感的火花;平凡的字元,串起別樣的精彩;細膩的語言,盤活冰冷的.程序;非凡的才華,開啟幸福的天地。程序員節,願你開懷,收獲精彩!
8.在你的程序里,快樂無需編譯,幸福自會運行;美麗沒有指令,人生也會計算;心情不必升級,自由自會擴展。程序員節,你的幸福數據在載入!
9.你很少用滑鼠,你都是直接輸入指令。你很少用五筆,你從來都是字母加數字。你敲鍵盤就像彈鋼琴,行雲流水一般,最後的回車將美好的創意上傳。你不需要世人理解,你龐大的程序,在凡夫俗子看來只是滑鼠一點。你享受寂寞,欣賞繁瑣,專門糾錯,只為了大家簡單快樂的生活。你辛苦了,程序員節快樂!
10.請用真情研製一個愛心程序,讓世界溫暖長存;請用智慧設計一個和平程序,讓人間充滿安寧;請用勤勞開發一個醫學程序,讓人們無病纏身;程序員日,願所有程序員們工作順心,快樂開心!
11.一條網線連接四面八方,敲打鍵盤帥氣的模樣,「蝸居」生活胸懷天下,編一套快樂的程序,讓世界歡暢,程序員日願程序員朋友好好休息,身體健康,「不著病毒」,祝福你們明天再次創造輝煌。
12.你從不玩游戲,你只編寫游戲程序。你很少用QQ,你可以在網路的任一角落留言,只要你願意。你很枯燥,但從不無聊。你娛樂很少,但卻常常微笑。你醉心於腦力的激盪,你是網路的源代碼,你是人類創意的奇葩。程序員節,祝你健康並快樂著!
④ 提倡中文編程為什麼會總遭到程序員的嘲諷
原因:
1,用英文是歷史原因;
2,編程環境生產使用的都是英文的,包括運行系統。
3,程序生態是英文的。
4,程序上語言只是符號,因此,不論你用什麼自然語言來表達,只要編譯器能轉換,都是可以的。
7,看盡千帆過,跳出此山中。不用太糾結於表面形式,尋找更深本質,或許會更好。
⑤ 想知道文件後綴如何正確使用
後綴名我不太懂呀。。
給你個東西。。你自己去看看吧````````````
歡迎光臨 C++ Builder 研究! 本站主要面向 Borland 開發者(C++Builder / Delphi)以及C/C++編程愛好者。發布資料請致信給
Friday 2006-10-20 來訪IP: 222.49.65.28 頁面訪問量:5556247
返回首頁 常規代碼 編程文檔 三方組件 其他信息 工具資料 電子書籍 網友作品 程序論壇 關於我們
常見專用格式文件
關鍵字:文件格式,後綴 其他信息 (327)
News(業界新聞) (4)
Web(Web編程) (22)
Network(網路知識) (139)
OS(操作系統) (41)
Software(軟體工程) (11)
Joke(搞笑網文) (69)
Misc(其他/雜項) (32)
Hardware(硬體相關) (9)
特別推薦
本站首頁 www.ccrun.com --> 其他信息 --> Misc(其他/雜項) 高級搜索
[新浪ViVi] [Poco網摘] [365KEY] [博採] [億友響享] [你摘] [YouNote] [天極網摘] [和訊網摘]
文檔標題:常見專用格式文件
原作者:佚名
更新日期:2005-11-06
瀏覽次數:5296
關鍵字:文件格式,後綴
A部分
AAM Authorware shocked文件
AAS Authorware shocked包
ABF Adobe二進制屏幕字體
ABK CorelDRAW自動備份文件
ABS 該類文件有時用於指示一個摘要(就像在一篇有關科學方面的文章的一個摘要或概要,取自abstract)
ACE Ace壓縮檔案格式
ACL CorelDRAW 6鍵盤快捷鍵文件
ACM 視筐t統目錄文件
ACP Microsoft office助手預酉湮募?
BPL Borlard Delph 4打包庫
BQY BrioQuery文件
BRX 用於查看多媒體對像目錄的文件
BSC MS Developer Studio瀏蛹�募?
CCB Visual Basic動態按鈕配置文件
CCF 多媒體查看器配置文件,用於OS/2
CCH Corel圖表文件
CCM Lotus cc:郵箱(例如「INBOX.CCM」)
CCO CyberChat數據文件
CCT Macromedia Director Shockwave投影
CDA CD音頻軌道
CDF Microsoft頻道定義格式文件
CDI Philip的高密盤交互格式
CDM Visual dBASE自定義數據模塊文件
CDR CorelDRAW繪圖文件;原始音頻CD數據文件
CDT CorelDRAW模板
CDX CorelDRAW壓縮繪圖文件;Microsoft Visual FoxPro索引文件
CEL CIMFast事件語言文件
CER 證書文件(MIME x-x509-ca-cert)
CFB Compton的多媒文件
CFG 配置文件
CFM CotdFusion模板文件;Visual dBASE 視等峇嵷w製表單
CGI 公共網關介面腳本文件
CGM 計算機圖形元文件
CH OS/2配置文件
CHK 由視絢牮L碎片整理器或磁碟掃瞄保存的文件碎片
CHM 編譯過的HTML文件
CHR 字元集(字體文件)
CHP Ventura Publisher章節文件
CHT ChartViem文件;Harvard Graphics矢量文件
CIF Adaptec CD 創建器 CD映像文件
CIL Clip Gallery下載包
CIM SimCity 2000文件
CIN OS/2改變控制文件用於跟蹤INI文件中的變化
CK1 iD/Apogee Commander Keen 1數據文件
CK2 iD/Apogee Commander Keen 2數據文件
CK3 iD/Apogee Commander Keen 3數據文件
CK4 iD /Apogee Commander Keen 4數據文件
CK5 iD /Apogee Commander Keen 5數據文件
CK6 iD /Apogee Commander Keen 6數據文件
CLASS Java類文件
CLL Crick Software Clicker文件
CLP 視?剪貼板文件
CLS Visual Basic類文件
CMD 視?NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件
CMF Corel元文件
CMG Chessmaster保存的文件,用於幫助索引或其他目的內容文件
COB TrueSpace 2對像文件
COD Microsoft C編譯器產生的可顯示機器碼/匯編代碼文件,其雲�雪瘠代碼作為注釋
COM 命令文件(程序)
CPD Corel Print Office文件(圖形)
CPD,CPE 傳真覆蓋文檔
CPI Microsoft MS-DOS代碼頁信息文件
CPL 控制面板擴展名,Corel顏色板
CPO Corel列印存儲文件
CPP C++代碼文件
CPR Corel提供說明書文件
CPT Corel 照片-繪畫圖像
CPX Corel Presentation Exchange壓縮圖形文件
CRD 視?Cardfile文件
CRP Corel 提供的噝袝r介紹文件;Visual dBASE自定義報表文件
CRT 認證文件
CSC Corel腳本文件
CSP PC Emcee On_Screen圖像
CSS 瀑布式表格文件
CST Macromedia Director Cast文件
CSV 逗號分隔的值文件
CT Scitex CT點陣圖文件;Paint Shop Pro Grapic編輯器文件
CTL 通常用於表示一個包含控制項信息的文件;FaxWork用它來保持有關每個傳真收到或發出的信息
CUE Microsoft提示牌數據文件
CUR 視等�苳憟?CUT Dr Halo點陣圖文件
CV Corel版本的檔案文件;Microsoft CodeView信息屏幕文件
CWK ClarisWorks數據文件.
CWS ClarisWorks模塊
CXT Macromedia Director受保護的(不可編輯的)投影文件
CXX C++源代碼文件
D部分
DAT 數據文件;WrodPerfect合並數據文件;用於一些MPEG格式的文件
DB Borland的Paradox 7表
DBC Microsoft Visual FoxPro資料庫容器文件
DBF dBASE文件,一種由Ashton-Tate創建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和類似資料庫或與資料庫有關產品識別;可用數據文件(能被Excel 97打開);Oracle 8.1.x表格空間文件
DBX 郵件資料夾
DCM DCM模塊格式文件
DCR 沖擊波文件
DCS 桌面顏色分隔文件
DCT Microsoft Visual FoxPro資料庫容器
DCU Delphi編譯單元文件
DCX Microsoft Visual FoxPro資料庫容器;基於PCX的傳真圖像;宏
DC5 DataCAD繪圖文件
DDF Btrieve呼 love this forum !!!trieve數據定義文件,它包含用於描述Btrieve呼 love this forum !!!trieve文件的元數據
DDIF Digital Equipment或 Compaq格式,用於保存他們圖像與字處理文檔
DEF SmartWareⅡ數據文件;C++模塊定義文件
DEFI Oracle 7 卸載腳本文件
DEM 用於表示數字高度模型的USGS基準的文件
DER 認證文件
DEWF Macintosh Sound Cap/Sound Edit錄音設備格式
DGN Macintosh 95 CAD繪圖文件
DIB 設備無關點陣圖
DIC 目錄
DIF 可進行數據互換的電子表格
DIG DigiLink格式;Sound DesignerⅠ音頻文件
DIR MacromediaDirector文件
DIZ 描述文件
DLG C++對話框腳本文件
DLL 動態鏈接庫
DLS 可下載聲音文件
DMD Visual dBASE數據模塊文件
DMF X-Trakker音樂模塊(MOD)文件
DOC FrameMaker或FrameBuilder文檔;Word Star文檔、Word Perfect文檔、Microsoft Word文檔;DisplayWrite文檔
DOT Microsoft Word文檔模板
DPL Borland Delph3壓縮庫
DPR Borland Delphi工程頭文件
DRAW Acorn的基於對象的矢量圖像文件
DRV 驅動程序
DRW Micrografx Designer/Draw;Pro/E繪畫文件 cordrew文件
DSF Micrografx Designer VFX文件
DSG DOOM保存的文件
DSM Dynamic Studio音樂模塊(MOD)文件
DSP Microsoft Developer Studio工程文件
DSQ Corel QUERY(查詢)文件
DST 刺綉機圖形文件
DSW Microsoft Developer Studio工作區文件
DTA Word Bank(世界銀行)的STARS數據文件
DTD SGML文檔類型定義(DTD)文件
DTED 地面高度數字數據(圖形的數據格式)文件
DTF Symantec Q&A相關的資料庫數據文件
DTM DigiTrakker模塊文件
DUN Microsoft拔號網路導出文件
DV 數字視頻文件(MIME)
DWD DiamondWare數字化文件
DWG AutoCAD工程圖文件;AutoCAD或Generic CADD老版本的繪圖格式
DXF 可進行互交換的繪圖文件格式,二進制的DWG格式的文本表示;數據交換文件
DXR Macromedia Director受保護(不可編輯)電影文件
D64 Commodore的64位模擬磁碟圖像文件
E部分
EDA Ensoniq ASR磁碟映像
EDD 元素定義文檔(FrameMaker+SGML文檔)
EDE Ensoniq EPS磁碟映像
EDK Ensoniq KT磁碟映像
EDQ Ensoniq SQ1/SQ2/Ks32磁碟映像
EDS Ensoniq SQ80磁碟映像
EDV Ensoniq VFX-SD磁碟映像
EFA Ensoniq ASR文件
EFE Ensoniq EPS文件
EFK Ensoniq KT文件
EFQ Ensoniq SQ1/SQ2/Ks32文件
EFS Ensoniq SQ80文件
EFV Ensoniq VFX-SD文件
EMD ABT擴展模塊
EMF 視絛W強元文件
EML Microsoft Outlook Express郵件消息(MIME RTC822)文件
ENC 重演文件
ENFF 中性文件格式擴展名
EPHTML Perl解釋增強HTML文件
EPS 壓縮的PostScript圖像
EPSF 壓縮的PostScript文件
ERI ERWin文件
ERR 當RobooHELP幫助編譯器企圖編譯一個幫助系統源文件時用來存儲錯誤消息的文件
EPX ERWin文件
ESPS ESPS音頻文件
EUI Ensoniq ESP家族的壓縮磁碟映像
EVY 特使文檔
EWL Microsoft Encarta文檔
EXC Microsoft Word禁止字字典
EXE 可執行文件(程序)
F部分
F FORTRAN文件
F2R Farandoyle線性模塊格式
F3R Farandoyle分塊線性模塊格式
F77 FORTRAN文件
F90 FORTRAN文件
FAR Fradole Composer音樂模塊(MOD)文件
FAV Microsoft Outlook導航條
FAX 傳真類型圖像
FBK Navison 金融備份
FCD 虛擬CD-ROM
FDB Navison 金融資料庫
FDF Adobe Acrobat表單文檔文件
FEM CADRE有限元素網路文件
FFA,FFL,FFO,FFK Microsoft快速查找文件
FFF GUS PnP銀行文件格式
FFT 最終格式文本(IBM的DCA一部分)
FH3 Als Freehand 3繪圖文件
FIF Fractal圖像文件
FIG REND386/AVRIL使用的文件格式
FITS CCD照相機圖像;靈活圖像傳輸系統
FLA Macromedia Flash電影
FLC Autodesk FLIC動畫文件
FLF Corel Paradox產生的格式:Navison Financials許可文件;OS/2驅動程序文件
PLI Autodesk FLIC動畫
FLT StarTrekker音樂模塊(MOD)文件;MultiGen Inc的Open Flight使用的文件格式;Corel過濾器文件
FM Adobe FrameMaker文檔
FMB Oracle4.0版或以後版本表單的二進制源代碼文件
FML 文件鏡象列表(GetRight)
FMT Oracle 4.0版或以後版本表單的文本格式;Microsoft Schele+ 列印文件
FMX Oracle 4.0版或以後版本可執行表單
FND Microsoft Explorer保存的搜索文件(Find applet)
FNG 字體組文件(字體導航器,Font Navigator)
FNK Funk Tracker模塊格式
FOG Fontographer模塊字體
FON 系統字體
FOR FORTRAN文件
FOT 字體相關文件
FP FileMaker Pro文件
FP1 Flying Pigs for 視絛?琱憟?FP3 FileMaker Pro文件
FPT FileMaker Pro文件;Microsoft Fox Pro備注字體文件
FPX FlashPix點陣圖
FRM 表單;Frame Maker或Frame Builder文檔;Oracle可執行表(3.0版或早期版本);Visual Basic表單;WordPerfect Merge表單;DataCAD標志報表文件
FRT Microsoft FoxPro報表文件
FRX Visual Basic表單文本;Microsoft FoxPro報表文件
FSF fPrint Audit Tool文件格式
FSL Borland的Paradox 7表單;Corel Paradox保存的表單
FSM Parandoyle示例格式
FT Lotus Notes全文本索引
FTG 全文本搜索組文件,由視耋飢U系統查找時產生——可以刪除,並在需要時重建起來
FTS 全文本搜索引文件,由視耋飢U系統查找時產生
FW2 Framework Ⅱ文件
FW3 Framework Ⅲ文件
FW4 Framework Ⅳ文件
FXP 經Microsoft FoxPro編譯的源文件
FZB Casio FZ-1銀行轉儲
FZF Casio FZ-1完全轉儲
FZV Casio FZ-1聲音轉儲
G部分
G721 Raw CCITT G.721 $bit ADPCM格式數據
G723 Raw CCITT G.723 3或5bit ADPCM格式數據
GAL Corel多媒體管理器相集
GCD Generic CADD繪畫文件(後續版本)
GCP Ground Control Point(地面控制點)文件,用於遠景數據形成圖像過程,經常用於生成圖工程—CHIPS(copenhagen image processing system)使用這些文件
GDB InterBase資料庫文件
GDM 鈴聲、口哨聲和聲音板模塊格式
GED GEDCOM 系譜數據文件,用於記錄和交換系譜數據的流行格式;圖形環境文檔繪畫
GEM GEM元文件
GEN Ventura產生的文本文件
GetRight GetRight未完成的下載文件
GFC Patton&Patton FlowCharting 4 flowchart文件
GFI,GFX Genigraphics圖形鏈接表示文件
GHO Norton 克隆磁碟映像
GID 視?95全局索引文件(包括幫助狀態)
GIF CompuServe點陣圖文件 動畫圖檔
GIM,GIX Genigraphics圖形鏈接介紹文件
GKH Ensoniq EPS家簇磁碟映像文件
GKS Gravis Grip Key文檔
GL 動畫格式
GNA Genigraphics圖形鏈接介紹文件
GNT 生成代碼,Micro Focus屬性格式里的可執行代碼
GNX Genigraphics圖形鏈接介紹文件
GRA Microsoft Graph文件
GRD 用於遠程視景數據產生地圖過程的格式文件,通常應用於形成地圖工程—CHIPS(copenhagen image processing system)使用這些文件
GRF Grapher(Golden Software公司)圖形文件
GRP 程序管理組
GSM Raw GSM 6.10音頻流;Raw「byte aligned(比特對齊的)」 GSM 6.10音頻流;US Robotics語音數據機
GTK Graoumftracker(老)音樂模塊(MOD)文件
GT2 Graoumftracker(新)音樂模塊(MOD)文件
GWX,GWZ Cenigraphis圖形鏈接介紹文件
GZ UNIX gzip壓縮文件
H部分
H C程序頭文件
HCM IBM HCM配置文件
HCOM 聲音工具HCOM格式
HCR IBM HCD/HCM產品配置文件
HDF 高級計算機應用程序本地中心(NCSA) geospatial Hierarchial數據格式文件
HED HighEdit文檔
HEL Microsoft Hellbender格式保存的嘸�O視器配置文件
MAK Visual Basil或Microsoft Visual C++工程文件
MAM Microsoft Access宏
MAN UNIX手冊頁輸出
MAP 映射文件;Duke Nukem 3D WAD呦涓袷?
MBX Microsoft Outlook保存email格式;Eudora郵箱
MCC Dailerl0呼叫卡
MCP Metrowerks CodeWarrior工程文件
MCR DataCAD鍵盤宏文件
MCW Microsoft Word的Macintosh文檔
MDA Microsoft Access內抽入器;Microsoft Access 2.0版及其後續版本的工作組事件
MDB Microsoft Access資料庫
MDE Microsoft Access MDE文件
MDL 數字跟蹤器音樂模塊(MOD)文件;Quake模 塊文件
MDN Microsoft Access空資料庫模板
MDW Microsoft Access工作組文件
MDZ Microsoft Access向導模板文件
MED 音樂編輯器,OctaMED音樂模塊(MOD)文件
MER 電子表格/資料庫數據交換格式;FileMaker、Excel及其他軟體能識別
MET 表示管理器元文件
MFG Pro/ENGINEER製造文件
MGF 在材料與幾何學里的文件格式
MHTM,MHTML MHTML文檔(MIME)
MI 雜項
MIC Microsoft Image Composer文件
MID MIDI音樂
MIF Adobe FramMaker交換格式
MIFF 與機器無關格式文件
MIM,MIME,MME Internet郵件擴展格式的多用途文件,經常作為發送e-mail時在AOL里附件而創建的文件;在一個多區MIM文件里的文件能用WinZip或其他類似程序打開
MLI 3D Studio的材料庫格式文件
MMF Meal Master格式;一個處方類格式;Microsoft郵件文件
MMG 超過20/20表或集會數據文件
MMM Microsoft多媒體電影
MMP Mindmapor Mind Manager文件
MN2 Descent2任務文件
MND,MNI Mandelbort for 視?MNG 多映像網路圖形
MNT,MNX Microsoft FoxPro菜單文件
MNU Visual dBASE菜單文件;Intertel Systems Interact菜單文件
MOD Fast Tracker、Star Trekker、Noise Tracker(等等)音樂模塊文件;Microsoft多計劃電子表格;Amiga/PC磁軌文件
MOV QuickTime for 視給q影
MP2 第二層MPEG音頻文件
MP3 第三層MPEG音頻文件
MPA MPEG相關文件,MIME「mpeg類型」
MPE,MPEG,MPG MPEG動畫文件
MPP Microsoft工程文件;CAD繪圖文件格式
MPR Microsoft FoxPro菜單(已編譯)
MRI MRI掃瞄文件
MSA 魔術陰影檔案
MSDL Manchester的場景描述語言
MSG Microsoft郵件消息
MSI 視?安裝器包
MSN Microsoft網路文檔;Descent Mission文件
MSP Microsoft Paint(畫圖)點陣圖文件;視?Installer路徑文件
MST 視?安裝器傳輸文件
MTM Multi 跟蹤器音樂模塊(MOD)文件
MUL Ultima在線
MUS 音樂
MUS10 Mus10聲音
MVB Microsoft多媒體查看器文件
MWP Lotus WordPro 97 Smart Master文件
N部分
NAN Nanoscope文件(Raw Grayscale)
NAP NAP元文件
NCB Microsoft Developer Studio文件
NCD Norton改變目錄
NCF NetWare命令文件;Lotus Notes內部剪切板
NDO 3D 低多邊形建模器,Nendo
netCDF 網路公用數據表單
NFF 中性文件格式
NFT NetObject Fusion模板文件
NIL Norton游標庫文件(EasyIcons-兼容)
NIST NIST Sphere聲音
NLB Oracle 7數據
NLM NetWare可裝載模塊
NLS 用於本地化的國家語言支持文件(例如,Uniscape)
NLU Norton Live Update e-mail 觸發器文件
NOD NetObject Fusion文件
NSF Lotus Notes資料庫
NSO NetObject Fusion文檔文件
NST Noise Tracker音樂模塊(MOD)文件
NS2 Lotus Notes資料庫(第二版)
NTF Lotus Notes資料庫模板
NTX CA-Clipper索引文件
NWC Noteworthy Composer歌曲文件
NWS Microsoft Outlook Express新聞消息(MIME RFC822)
O部分
O01 台風聲音文件
OBD Microsoft Office活頁夾
OBJ 對像文件
OBZ Microsoft Office活頁夾向導
OCX Microsoft對像鏈接與嵌入定製控制項
ODS Microsoft Outlook Express郵箱文件
OFF 3D 網狀物對像文件格式
OFN Microsoft Office FileNew文件
OFT Microsoft Outlook模板
OKT Oktalyzer音樂模塊(MOD)文件
OLB OLE對像庫
OLE OLE對像
OOGL 面向對像圖形庫
OPL 組織者編程語言源文件——Psion/Symbian
OPO OPL輸出可執行文件
OPT Microsoft Developer Studio文件
OPX OPL擴展DLL(動態鏈接庫)
ORA Oracle 7 配置文件
ORC Oracle 7腳本文件
ORG Lotus Organizer 文件
OR2 Lotus Organizer 2 文件
OR3 Lotus Organizer 97 文件
OSS Microsoft Office查找文件
OST Microsoft Exchange / Outlook 離線文件
OTL Super NoteTab 模板文件
OUT C語言輸出文件
P部分
P3 Primavera Project Planner(工程設計器)文件
P10 Tektronix Plot 10 繪圖文件
P65 PageMaker 6.5文件
P7C Digital ID 文件(MIME)
PAB Microsoft個人地址簿
PAC SB Studio Ⅱ 包
PAK Quake WAD文件
PAL 壓縮文件
PART Go!Zilla部分下載文件
PAS Pascal源代碼
PAT DataCAD Hatch模式文件;CorelDRAW模式;高級Gravis Ultrasound / Forte 技術;碎片文件
PBD PowerBuilder動態庫,作為本地DLL的一個替代物
PBF Turtle Beach的Pinnacle 銀行文件
PBK Microsoft PhoneBook(電話簿)
PBL 用於在PowerBuilder開發環境中的PowerBuilder動態庫
PBM 可導出點陣圖
PBR PowerBuilder資源
PCD Kodak Photo-CD映像;P-Code編譯器測試腳本,由Microsoft測試與Microsoft Visual測試
PCE Maps Eudora郵箱名字的DOS文件名
PCL Hewlett-Packard 列印機控制語言文件(列印機備用點陣圖)
PCM 聲音文件格式;OKI MSM6376 合成晶元 PCM格式
PCP Symantec Live Update Pro文件
PCS PICS動畫文件
PCT Macintosh PICT繪畫文件
PCX Zsoft PC畫筆點陣圖
PDB 3Com PalmPilot資料庫文件
PDD 可以用Paint Shop Pro或其他圖像處理軟體打開的圖形圖像
PDF Adobe Acrobat 可導出文檔格式文件(可用Web瀏蛹�Y源文件
RA RealAudio聲音文件
RAM RealAudio元文件
RAR RAR壓縮檔案(Eugene Roshall格式)
RAS Sun光柵圖像點陣圖
RAW RAW文件格式(點陣圖);Raw標識的PCM數據
RBH 由RoboHELP維持的RBH文件,它加入到一個幫助工程文件的信息中
RDF 資源描述框架文件(涉兒 love this forum !!!ML和元數據)
RDL Descent注冊水平文件
REC 錄音機宏;RapidComm聲音文件
REG 注冊表文件
REP Visual dBASE報表文件
RES Microsoft Visual C++資源文件
RFT 可修訂的表單文本(IBM的DCA一部分或文檔內容框架結構一部分)
RGB,SGI Silicon圖形RGB文件
RLE Run-Length編碼的點陣圖
RL2 Descent2注冊水平文件
RM RealAudio視頻文件
RMD Microsoft RegMaid文檔
RMF Rich Map格式(3D呦鋬熱荼?
TOL Kodak照片增強器
TOS Atari 16/32和32/32計算機操作系統文件
TPL CakeWalk聲音模板文件;DataCAD模板文件
TPP Teleport Pro工程
TRK Kermit腳本文件
TRM 終端文件
TRN MKS源完整性工程用法日誌文件
TTF TrueType字體文件
TTK Corel Catalyst Translaton Tool Kit
TWF TabWorks文件
TWW Tagwrite模板
TX8 MS-DOS文本
TXB Descent/D2編碼概要文件
TXT ASCⅡ文本格式的聲音數據
TXW Yamaha TX16W波形文件
TZ 老的壓縮格式文件
T2T Sonate CAD建模軟體文件
U部分
UB 原始未符號化的位元組(8位)數據
UDF 視?NT/2000唯一性資料庫文件
UDW 原始未符號化的雙字(32位)數據
ULAW 美國電話格式(CCITT G.711)聲音
ULT Ultra Tracker音樂模塊(MOD)文件
UNI MikMod UniMod格式化文件
URL Internet快捷方式文件
USE MKS源完整性文件
UU,UUE UU編碼文件
UW 原始未符號化字(16位)數據
UWF UltraTracker波形文件
V部分
V8 Covox 8位聲音文件
VAP 加註講演文件
VBA VBase文件
// 本文轉自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=959&d=uq7b2d
VBP Microsoft Visual Basic工程文件
VBW Microsoft Visual Basic工作區文件
VBX Microsoft Visual Basic用戶定製控制項
VCE Natural MicroSystems(NMS)未格式化聲音文件(由Cool Edit使用)
VCF 虛擬卡文件(Netscape);Veri配置文件;為與Sense8的WordToolkit一起使用而定義對像
VCT,VCX Microsoft FoxPro類庫
VDA Targa點陣圖
VI National Instruments LABView產品的虛擬設備文件
VIFF Khoros Visualisation格式
VIR Norton Anti-Virus或其他殺毒產品用於標識被病毒感染的文件
VIV VivoActive Player流視頻文件
VIZ Division的dVS/dVISE文件
VLB CorelVentura庫
VMF FaxWorks聲竣憟?VOC Creative Labs的Sound Blaster聲音文件
VOX 用ADPCM編碼的對話聲音文件;Natural MicroSystems(NMS)格式化聲音文件,Talking Technology聲音文件
VP Ventura Publisher出版物
VQE,VQL Yamaha Sound-VQ定位器文件
VQF Yamaha Sound-VQ文件(可能出現標准)
VRF Oracle 7配置文件
VRML 虛擬現實建模語言文件
VSD Visio繪畫文件(流程圖或圖解)
VSL 下載列表文件(GetRight)
VSN 視?9x/NT Virusafe版文件,用於保持有關目錄中所有信息,當一個文件被訪問,其中信息與VSN信息進行比較,以確保它們保持一致
VSS Visio模板文件
VST Targa點陣圖
VSW Visio工作區文件
VXD Microsoft 視紫篔應]備驅動程序
W部分
W3L W3Launch文件
WAB Microsoft Outlook文件
WAD 包含有視頻、玩家水平和其他信息的DOOM呋蚱淥�┫低秤糜詘鎦�饕�蚱淥�康哪諶菸募?
COB TrueSpace 2對像文件
COD Microsoft C編譯器產生的可顯示機器碼/匯編代碼文件,其雲�雪瘠代碼作為注釋
COM 命令文件(程序)
CPD Corel Print Office文件(圖形)
CPD,CPE 傳真覆蓋文文件
CPI Microsoft MS-DOS代碼頁信息文件
CPL 控制面板擴展名,Corel顏色板
CPO Corel列印存儲文件
CPP C++代碼文件
CPR Corel提供說明書文件
CPT Corel 照片-繪畫圖像
CPX Corel Presentation Exchange壓縮圖形文件
CRD 視?Cardfile文件
CRP Corel 提供的運行時介紹文件;Visual dBASE自定義報表文件
CRT 認證文件
CSC Corel腳本文件
CSP PC Emcee On_Screen圖像
CSS 瀑布式表格文件
CST Macromedia Director Cast文件
CSV 逗號分隔的值文件
CT Scitex CT點陣圖文件;Paint Shop Pro Grapic編輯器文件
CTL 通常用於表示一個包含控制項信息的文件;FaxWork用它來保持有關每個傳真收到或發出的信息
CUE Microsoft提示牌數據文件
CUR 視等�?#123;憟?CUT Dr Halo點陣圖文件
CV Corel版本的檔案文件;Microsoft CodeView信息屏幕文件
CWK ClarisWorks數據文件.
CWS ClarisWorks模塊
CXT Macromedia Director受保護的(不可編輯的)投影文件
CXX C++源代碼文件
D部分
DAT 數據文件;WrodPerfect合並數據文件;用於一些MPEG格式的文件
DB Borland的Paradox 7表
DBC Microsoft Visual FoxPro資料庫容器文件
DBF dBASE文件,一種由Ashton-Tate創建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和類似資料庫或與資料庫有關產品識別;可用數據文件(能被Excel 97打開);Oracle 8.1.x表格空間文件
DBX 郵件資料夾
DCM DCM模塊格式文件
DCR 沖擊波文件
DCS 桌面顏色分隔文件
DCT Microsoft Visual FoxPro資料庫容器
DCU Delphi編譯單元文件
DCX Microsoft Visual FoxPro資料庫容器;基於PCX的傳真圖像;宏
DC5 DataCAD繪圖文件
DDF Btrieve呼 love this forum
⑥ 編程5分鍾,命名2小時!大神程序員都在用這套命名方法
在 軟體中隨處可見命名:要給變數、函數、參數、類和封包命名,還要給源代碼及源代碼所在目錄命名,甚至還有jar文件、war文件和ear文件命名。
但是,看似簡單的命名,也是讓不少程序員頭疼的問題。 有一些小夥伴,在進行變數命名的時候,對於自己熟悉的英文,可能還會用英文命名一下,如果需要命名的部分不會用英文表達,或許就直接用拼音了。
有的童鞋一下想不起來怎麼命名,直接用拼音直接用aa,bb等這樣沒有任何代表意義的字母來命名,可讀性非常差,可能自己今天寫的,一個星期後回來再看,也忘記其具體代表的含義了。
因此,許多人在寫代碼之前,總會在想啊想啊,用什麼命名法好呢?對於經常在C++、Java、Python等主流語言上切換的強迫症來說,換個語言換種命名風格簡直不要太混亂。
既然有這么多命名要做,不妨做好它。本期內容中,非同步君為大家帶來了起個好名字應遵從的幾條簡單規則,一起來看看吧
— 01 —
名副其實
名副其實說起來簡單。我們想要強調,這事很嚴肅。選個好名字要花時間,但省下來的時間比花掉的多。注意命名,而且一旦發現有更好的名稱,就換掉舊的。這么做,讀你代碼的人(包括你自己)都會更開心。
變數、函數或類的名稱應該已經答復了所有的大問題。它該告訴你,它為什麼會存在,它做什麼事,應該怎麼用。如果名稱需要注釋來補充,那就不算是名副其實。
名稱d什麼也沒說明。它沒有引起讀者對時間消逝的感覺,更別說以日計了。我們應該選擇指明了計量對象和計量單位的名稱:
選擇體現本意的名稱能讓人更容易理解和修改代碼。下列代碼的目的何在?
為什麼難以說明上述代碼要做什麼事?裡面並沒有復雜的表達式,空格和縮進中規中矩,只用到三個變數和兩個常量,甚至沒有涉及任何其他類或多態方法,只是(或者看起來是)一個數組的列表而已。
問題不在於代碼的簡潔度,而在於代碼的模糊度:即上下文在代碼中未被明確體現的程度。上述代碼要求我們了解類似以下問題的答案:
(1)theList中是什麼類型的東西?
(2)theList零下標條目的意義是什麼?
(3)值4的意義是什麼?
(4)我怎麼使用返回的列表?
問題的答案沒體現在代碼段中,可代碼段就是它們該在的地方。比方說,我們在開發一種掃雷 游戲 ,我們發現,盤面是名為theList的單元格列表,那就將其名稱改為gameBoard。
盤面上每個單元格都用一個簡單數組表示。我們還發現,零下標條目是一種狀態值,而該種狀態值為4表示「已標記」。只要改為有意義的名稱,代碼就會得敏液到相當程度的改進:
注意,代碼的簡潔性並未被觸及。運算符和常量的數量全然保持不變,嵌套數量也全然保持不變,但代碼變得明確多了。
還可以更進一步,不用int數組表示單元格,而是另寫一個類。該類包括一個名副其實的函數(稱為isFlagged),從而掩蓋住那個魔術數[1]。於是得到函數的新版本:
只要簡單改一下名稱,就能輕易知道發生了什麼。這就是選液含用好名稱的力量。
— 02 —
避免誤導
程序員必須避免留下掩藏代碼本意的錯誤線索。應當避免使用與本意相悖的詞,例如,hp、aix和sco都不該用作變數名,因為它們都是Unix平台或類Unix平台的專有名稱。即便你是在編寫三角計算程鬧拿笑序,hp看起來是一個不錯的縮寫[2],但那也可能會提供錯誤信息。
別用accountList來指稱一組賬號,除非它真的是List類型。List一詞對程序員有特殊意義。如果包納賬號的容器並非真是一個List,就會引起錯誤的判斷。
所以,用accountGroup或bunchOfAccounts,甚至直接用accounts都會好一些。
提防使用外形相似度較高的名稱。例如,想區分模塊中某處的XYZControllerFor-EfficientHandlingOfStrings和另一處的-OfStrings,會花多長時間呢?這兩個詞的外形實在太相似了。
以同樣的方式拼寫出同樣的概念才是信息。拼寫前後不一致就是誤導。我們很享受現代Java編程環境的自動代碼完成特性。鍵入某個名稱的前幾個字母,按一下某個熱鍵組合(如果有的話),就能得到一列該名稱的可能形式。
假如相似的名稱依字母順序放在一起,且差異很明顯,那就會相當有助益,因為程序員多半會壓根不看你的詳細注釋,甚至不看該類的方法列表就直接看名字挑一個對象。
誤導性名稱真正可怕的例子,是用小寫字母l和大寫字母O作為變數名,尤其是在組合使用的時候。當然,問題在於它們看起來完全像是常量「壹」和「零」。
讀者可能會認為這純屬虛構,但我們確曾見過充斥這類名稱的代碼。有一次,代碼作者建議用不同字體寫變數名,好顯得更清楚些,但前提是這種方案得要通過口頭和書面傳遞給未來所有的開發者才行。後來,只是做了簡單的重命名操作,就解決了問題,而且也沒引起別的問題。
— 03 —
做有意義的區分
如果程序員只是為滿足編譯器或解釋器的需要而寫代碼,就會製造麻煩。例如,因為同一作用范圍內兩樣不同的東西不能重名,你可能會隨手改掉其中一個的名稱,有時乾脆以錯誤的拼寫充數,結果就會出現在更正拼寫錯誤後導致編譯器出錯的情況。
光是添加數字系列或是廢話遠遠不夠,即便這足以讓編譯器滿意。如果名稱必須相異,那麼其意思也應該不同才對。
以數字系列命名(a1、a2…aN)是依義命名的對立面。這樣的名稱純屬誤導——完全沒有提供正確信息,沒有提供導向作者意圖的線索。試看:
如果參數名改為source和destination,這個函數就會像樣許多。
廢話是另一種沒意義的區分。假設你有一個Proct類,如果還有一個名為ProctInfo或ProctData的類,那它們的名稱雖然不同,意思卻無區別。Info和Data就像a、an和the一樣,是意義含混的廢話。
注意,只要體現出有意義的區分,使用a和the這樣的前綴就沒錯。例如,你可能把a用在域內變數,而把the用於函數參數[5]。但如果你已經有一個名為zork的變數,又想調用一個名為theZork的變數,麻煩就來了。
廢話都是冗餘。variable一詞永遠不應當出現在變數名中。table一詞永遠不應當出現在表名中。NameString會比Name好嗎?難道Name會是一個浮點數?如果是這樣,就違反了關於誤導的規則。
設想有一個名為Customer的類,還有一個名為CustomerObject的類,它們的區別何在呢?哪一個是表示客戶 歷史 支付情況的最佳方式?
有一個應用反映了這種狀況。為當事者諱,我們改了一下,不過犯錯的代碼的確就是這個樣子:
程序員怎麼知道該調用哪個函數呢?
如果缺少明確約定,那麼變數moneyAmount與money就沒區別,customerInfo與customer沒區別,accountData與account沒區別,theMessage也與message沒區別。要區分名稱,就要以讀者能鑒別不同之處的方式來區分。
— 04 —
使用讀得出來的名稱
人類長於記憶和使用單詞。大腦的相當一部分就是用來容納和處理單詞的。單詞能讀得出來。人類的大腦中有那麼大的一塊地方用來處理言語,若不善加利用,實在是種恥辱。
如果名稱讀不出來,討論的時候就會像個傻鳥。「哎,這兒,鼻涕阿三喜摁踢(bee cee arr three cee enn tee)[6]上頭,有個皮挨死極翹(pee ess zee kyew)[7]整數,看見沒?」這不是小事,因為編程本就是一種 社會 活動。
有一家公司,程序裡面寫了一個genymdhms(生成日期,年、月、日、時、分、秒),他們一般讀作「gen why emm dee aich emm ess」[8]。我有見字照拼讀的惡習,於是開口就念「gen-yah-mudda-hims」。
後來好些設計師和分析師都有樣學樣,聽起來傻乎乎的。我們知道典故,所以會覺得很 搞笑 。 搞笑 歸 搞笑 ,實際是在強忍糟糕的命名。在給新開發者解釋變數名的意義時,他們總是讀出傻乎乎的自造詞,而非恰當的英語詞。比較
現在讀起來就像人話了:「喂,Mikey,看看這條記錄!生成時間戳(generation timestamp)[9]被設置為明天了!不能這樣吧?」
— 05 —
使用可搜索的名稱
對於單字母名稱和數字常量,有一個問題,就是很難在一大篇文字中找出來。
找MAX_CLASSES_PER_STUDENT很容易,但想找數字7就麻煩了,它可能是某些文件名或其他常量定義的一部分,出現在因不同意圖而採用的各種表達式中。如果該常量是個長數字,又被人錯改過,就會逃過搜索,從而造成錯誤。
同樣,e也不是一個便於搜索的好變數名,它是英文中最常用的字母,在每個程序、每段代碼中都有可能出現。由此而見,長名稱勝於短名稱,搜得到的名稱勝於用自造編碼代寫就的名稱。
竊以為單字母名稱僅用於短方法中的本地變數。名稱長短應與其作用域大小相對應 [N5]。若變數或常量可能在代碼中多處使用,則應賦予其便於搜索的名稱。再比較:
注意,上面代碼中的sum並非特別有用的名稱,不過至少搜得到它。採用能表達意圖的名稱,貌似拉長了函數代碼,但要想想看,WORK_DAYS_PER_WEEK比數字5好找得多,而列表中也只剩下了體現作者意圖的名稱。
— 06 —
避免使用編碼
編碼已經太多,無謂再自找麻煩。把類型或作用域編進名稱裡面,徒然增加了解碼的負擔。沒理由要求每位新人都在弄清要應付的代碼之外(那算是正常的),還要再搞懂另一種編碼「語言」。這對解決問題而言,純屬多餘的負擔。帶編碼的名稱通常也不便發音,容易打錯。
匈牙利語標記法
在往昔名稱長短很重要的時代,我們毫無必要地破壞了不編碼的規矩,如今後悔不迭。Fortran語言要求首字母體現出類型,導致了編碼的產生。BASIC語言的早期版本只允許使用一個字母再加上一位數字。匈牙利語標記法[10](Hungarian Notation,HN)將這種態勢愈演愈烈。
在Windows的C語言API的時代,HN相當重要,那時所有名稱要麼是一個整數句柄,要麼是一個長指針或者void指針,要不然就是string的幾種實現(有不同的用途和屬性)之一。那時候編譯器並不做類型檢查,程序員需要匈牙利語標記法來幫助自己記住類型。
現代編程語言具有更豐富的類型系統,編譯器也記得並強制使用類型。而且,程序員趨向於使用更小的類、更短的方法,好讓每個變數的定義都在視野范圍之內。
Java程序員不需要類型編碼,因為對象是強類型的,代碼編輯環境已經先進到在編譯開始前就能監測到類型錯誤的程度!所以,如今HN和其他的類型編碼形式都純屬多餘。它們增加了修改變數、函數或類的名稱或類型的難度,它們增加了閱讀代碼的難度,它們製造了讓編碼系統誤導讀者的可能性。
成員前綴
也不必用m_前綴來標明成員變數。應當把類和函數做得足夠小,以消除對成員前綴的需要。你應當使用某種可以高亮或用顏色標出成員的編輯環境。
此外,人們會很快學會無視前綴(或後綴),而只看到名稱中有意義的部分。代碼讀得越多,眼中就越沒有前綴。最終,前綴變作了不入法眼的廢料,變作了舊代碼的標志物。
介面和實現
有時也會出現採用編碼的特殊情形。比如,你在做一個創建形狀用的抽象工廠(Abstract Factory),該工廠是一個介面,要用具體類來實現。你怎麼來命名工廠和具體類呢?IShapeFactory和ShapeFactory嗎?我喜歡不加修飾的介面。前導字母I被濫用到了說好聽點兒是干擾,說難聽點兒根本就是廢話的程度。
我不想讓用戶知道我給他們的是介面,而就想讓他們知道那是一個ShapeFactory。如果在介面和實現中必須選其一來編碼的話,我寧肯選擇實現。ShapeFactoryImp,甚至是醜陋的CShapeFactory,都比對介面名稱編碼好。
-END-
代碼整潔之道
作者: [美] 羅伯特·C. 馬丁(Robert C. Martin)
譯者: 韓磊
內容簡介:
軟體質量,不但依賴架構及項目管理,而且與代碼質量緊密相關。這一點,無論是敏捷開發流派還是傳統開發流派,都不得不承認。
本書提出一種觀點:代碼質量與其整潔度成正比。干凈的代碼,既在質量上較為可靠,也為後期維護、升級奠定了良好基礎。作為編程領域的佼佼者,本書作者給出了一系列行之有效的整潔代碼操作實踐。這些實踐在本書中體現為一條條規則(或稱「啟示」),並輔以來自實際項目的正、反兩面的範例。只要遵循這些規則,就能編寫出干凈的代碼,從而有效提升代碼質量。
本書閱讀對象為一切有志於改善代碼質量的程序員及技術經理。書中介紹的規則均來自作者多年的實踐經驗,涵蓋從命名到重構的多個編程方面,雖為一「家」之言,然誠有可資借鑒的價值。