對乙個人來說,名字很重要,俗語說「人如其名」。對程式中的變數而言,名字同樣非常重要。
作為開發人員,你要花費大量的敲**時間來建立變數和考慮給變數起個名字。 名字無處不在。 你可以命名檔案、類、方法和變數。而命名的不同導致有的是好**,有的是糟糕的**,最終這會嚴重影響**維護的成本。
由於我們花費大量時間命名變數,因此做好它非常重要。 在本文中,我將向你展示一些簡單的規則,你可以遵循這些規則來建立名字。
在**中起名本身就是一門藝術!
這說起來容易做起來難。 你多久遇到一次變數名,而這些變數名沒有告訴你有關變數的真實資訊?
乙個好的經驗法則是:如果乙個名字需要注釋,那麼它並不是真實意圖的命名。
程式設計大師 robert c. martin 在《clean code》中說道:「使用注釋是為了彌補我們**表意上的不足。」
這句話意味著如果你的**需要新增注釋,就說明你的**還不夠好。同時,這也說明如果不能在單純的**中展示你對問題或演算法的理解,這是非常失敗的,你只能依靠一些注釋說明你的想法,而不能僅用**。
優秀的**可以讓人在沒有注釋的情況下看懂並理解,好的程式設計習慣也是讓所有必要的資訊都在**中展示出來。
以下**段是乙個變數,它不能揭示真正的意圖:
<?php
private $s; // time in seconds
變數 $s 沒有顯示任何意義。
它不會看到任何時間流逝的含義。最好選擇乙個名稱,該名稱指定要測量的內容以及該測量的單位。因此,很重要的一點就是,程式設計師要用**準確的表達出自己的思想,從而讓其他人明白程式的含義。
下面的示例中的變數名會更好,任選其一。
<?php
private $days_since_creation;
private $elapsed_time_in_seconds;
private $seconds_since_last_modified;
選擇顯示意圖的名稱可以使理解一段**變得更加容易,因此也易於維護。選擇名字需要時間,但是比起維護**,整體節省時間要多得多。
讓我們看一下以下示例:
<?php
function getlist()
}return $list1; }
function getoddnumbers()
}return $odd_numbers;
}
為什麼 getlist 函式的作用這麼難辨別?它並沒有複雜的表示式。**已縮排並正確格式化。只使用了三個變數,沒有花裡胡哨的東西。
再看一下 getoddnumbers 函式。你是否看到該函式與 getlist 函式完全相同?
注意,**的複雜度沒有改變。它仍然具有完全相同數量的運算子和變數,以及完全相同數量的巢狀邏輯。唯一改變的是**命名變得更加明確。
通過簡單的名稱重構,我們很容易分辨出這段**的功能。
不好的**示範:
public class entitiesrelation
當你在編寫針對某個領域的**時,你應該使用領域背景相關的名字。如果以後有另外的人(不僅是程式設計師,也許是測試人員)接觸你的**時,他能輕鬆的理解你寫背景相關的**含義。
所以,程式設計師首先應該考慮的是領域背景問題,之後才是如何出解決方案。
清晰的**示例:
public class productwithcategory
你應該避免留下掩蓋**含義的錯誤提示。
避免誤導其含義與預期含義有所差異的詞。例如,不要將產品分組稱為 productlist,除非它實際上是 list 型別的物件。這可能導致錯誤的結論。乙個更好的名字將是產品。
product products;
你可能選擇的最差的變數名稱是大寫的 o 和小寫的 l。這是因為它們看起來很像 0 和 1。
當心使用名稱變化很小的名稱。發現乙個檔案中的 somemethodforefficienthandlingoffiles 和另乙個檔案中的 somemethodforefficientstorageoffiles 之間的細微差別需要多長時間?乍一看,這些名稱看起來相同。
導致誤解的資訊比沒有資訊更糟糕,有些程式設計師喜歡「隱藏」一些重要資訊,但更糟的是,他們有時會寫出一些讓人誤解的**。
命名混淆:乙個詞不要表示多種概念
定義場景中的概念很難,在軟體開發過程中,程式設計師需要花費很多時間去分析某一場景,並命名場景中的各種元素,這樣的工作永遠都是讓程式設計師頭疼的事情。
不好的**示例:
//1.
void loadsingledata();
void fetchdatafiltered();
void getealldata();
//2.
void setdatatoview();
void setobjectvalue(int value);
在第一段**中,這個程式設計師想表達「獲取資料」這個概念,但他用了很多不同的詞」load」,」fetch」, 」get」。在乙個場景下,應該用乙個統一的詞表示這個概念。
在第二段**中,」set」一詞被用作了兩個概念,第乙個是「取出資料顯示」,第二個是「為乙個物件賦值」,應該用不同的詞表示這兩個不同的概念。
清晰的**示例:
//1.
void getsingledata();
void getdatafiltered();
void getalldata();
//2.
void loaddatatoview();
void setobjectvalue(int value);
數字系列命名不是乙個命名的好方法。這樣的名稱是非資訊性的,因為它們沒有提供**作者意圖的任何提示。
讓我們看下面的例子:
<?php
public function duplicatearray($arr1, &$arr2)
}
當將 arr
1和'>arr1和arr1和 arr2 重新命名為 sou
rce和
'>source和source和 destination 時,此**將更好地閱讀。
如果不能說出名字,那麼你就不能在聽起來像個白痴的情況下討論它。這實際上很重要,因為程式設計的一部分工作是社交活動,每個人都有很大的機會知道自己無法發音的變數名稱。
假設我們有乙個名為 $xsq 的變數名,這對貴公司來說是乙個非常重要的縮寫。想象一下與同事的對話:
「嘿,那可變的 eks ess kjew 呢?」
「你是說訪問佇列?」
一些開發人員將嘗試將變數發音為乙個單詞。其他人會拼出這個詞。
變數命名:使用在上下文有意義的名字
不好的**示例:
string addresscity;
string addresshomenumber;
string addresspostcode;
所以,沒有必要在「postcode」的前面加上「address」。而且,所有的這些資訊都應該有乙個上下文環境,在物件導向程式設計中,這裡應該用乙個「address」類來表達這個位址資訊。
清晰的**示例:
class address
由乙個字母組成的名稱,可能存在難以定位的問題。
數字常量也是如此。數值常量可以用常量變數代替。搜尋**時,數字 8 可能會給你帶來很多麻煩。
但是,用常量 max_blocks_displayed 替換它會使它變得更容易。
單字母名稱的唯一用例是簡短方法中的區域性變數。
廣州vi設計公司
不要使用字首。
例如,某些開發人員習慣在所有私有成員前面加上下劃線。別,你的類和方法應該足夠短小,以至於不需要任何這些字首。
或者,你可以使用 ide(或安裝外掛程式),該 ide 根據變數的範圍會為變數著色。
這樣,你可以在**中建立更有意義的名稱。
作為一名程式設計師你應該:
1、起的名字有意義,可以表達乙個概念
2、要考慮名字的長度,名稱中只有必要資訊
3、符合「編碼規範」,有助於理解
4、乙個概念不要多個名字混用
5、使用在背景領域和上下文中都有意義的名字
如何給文章標題取個「好名字」
好文章要有好的標題,有創意的標題會引發人的閱讀慾望,而且也會增加訪客對你的第一印象,而太過平庸的標題,不僅會被人忽略,而且,訪客也不會細則的看www.cppcns.com你的內容,匆匆掃一眼也就不會再關注這些內容了。打造受人矚目的文章標題,是十分重要的,所以,我們要學會寫好這至關重要的標題。1 幽默...
如何為專案起乙個好名字
嗯,首先,也就是起乙個好名字的前提是 你已經了解了專案的功能,缺陷,約束等方面的東東 接著,請隨便為專案起乙個名字 然後找出三個理由,說明現在這個名字不合適的地方 然後再起乙個名字,來彌補這三個理由所說的不合適的地方 接著再為現在這個名字找出三個理由,說明這個名字不合適的地方 再重新起乙個名字,來彌...
起個好名字的重要性
最近很多人關注 net開發人員犯的6大安全錯誤 這篇小短文http blog.csdn.net testing is believing archive 2007 12 21 1958004.aspx csdn還把它放到主頁面的專家專欄中,不過鬱悶的是把我的名字寫成了 陳技能 想起來從小時候到現在,...