1. 程式人生 > 實用技巧 >如何給程式中的變數起個好名字?

如何給程式中的變數起個好名字?

對一個人來說,名字很重要,俗語說“人如其名”。對程式中的變數而言,名字同樣非常重要。

作為開發人員,你要花費大量的敲程式碼時間來建立變數和考慮給變數起個名字。 名字無處不在。 你可以命名檔案、類、方法和變數。而命名的不同導致有的是好程式碼,有的是糟糕的程式碼,最終這會嚴重影響程式碼維護的成本。

由於我們花費大量時間命名變數,因此做好它非常重要。 在本文中,我將向你展示一些簡單的規則,你可以遵循這些規則來建立名字。

在程式碼中起名本身就是一門藝術!

1、名字要顯示真正意圖

這說起來容易做起來難。 你多久遇到一次變數名,而這些變數名沒有告訴你有關變數的真實資訊?

一個好的經驗法則是:如果一個名字需要註釋,那麼它並不是真實意圖的命名。

程式設計大師 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() {
	    $list1 = [];
	    
	    foreach ($this->the_list as $x) {
	        if ($x % 2 != 0) {
	            $list1[] = $x;
	        }
	    }
	    
	    return $list1;
	}
	
	function getOddNumbers() {
	    $odd_numbers = [];
	    
	    foreach ($this->numbers as $number) {
	        if (isOdd($number)) {
	            $odd_numbers[] = $number;
	        }
	    }
	    
	    return $odd_numbers;
	}

為什麼 getList函式的作用這麼難辨別?它並沒有複雜的表示式。程式碼已縮排並正確格式化。只使用了三個變數,沒有花裡胡哨的東西。

再看一下 getOddNumbers函式。你是否看到該函式與 getList 函式完全相同?

注意,程式碼的複雜度沒有改變。它仍然具有完全相同數量的運算子和變數,以及完全相同數量的巢狀邏輯。唯一改變的是程式碼命名變得更加明確。

通過簡單的名稱重構,我們很容易分辨出這段程式碼的功能。

2、使用某一領域背景中有意義的名字

程式設計師寫的所有程式碼都是和某一領域背景相關的,為了讓寫出的程式碼可以讓個更多的人理解,最好使用該領域背景下的名字。

不好的程式碼示範:

public class  EntitiesRelation
{
Entity o1;
Entity o2;
}

當你在編寫針對某個領域的程式碼時,你應該使用領域背景相關的名字。如果以後有另外的人(不僅是程式設計師,也許是測試人員)接觸你的程式碼時,他能輕鬆的理解你寫背景相關的程式碼含義。

所以,程式設計師首先應該考慮的是領域背景問題,之後才是如何出解決方案。

清晰的程式碼示例:

public class  ProductWithCategory
{
Entity product;
Entity category;
}

3、避免誤導資訊

你應該避免留下掩蓋程式碼含義的錯誤提示。

避免誤導其含義與預期含義有所差異的詞。例如,不要將產品分組稱為 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);

4、做出有意義的區分

數字系列命名不是一個命名的好方法。這樣的名稱是非資訊性的,因為它們沒有提供程式碼作者意圖的任何提示。

讓我們看下面的例子:

<?php
	
	public function duplicateArray($arr1, &$arr2) {
	  foreach ($arr1 as $key => $value) {
	    $arr2[$key] = $value;
	  }
	}

當將arr1arr1和arr2 重新命名為sourcesource和destination 時,此程式碼將更好地閱讀。

5、使用可以發音的單詞

如果不能說出名字,那麼你就不能在聽起來像個白痴的情況下討論它。這實際上很重要,因為程式設計的一部分工作是社交活動,每個人都有很大的機會知道自己無法發音的變數名稱。

假設我們有一個名為 $xsq 的變數名,這對貴公司來說是一個非常重要的縮寫。想象一下與同事的對話:

“嘿,那可變的 eks ess kjew 呢?”

“你是說訪問佇列?”

一些開發人員將嘗試將變數發音為一個單詞。其他人會拼出這個詞。

變數命名:使用在上下文有意義的名字

程式碼裡的名字都有自己的上下文,上下文對於理解一個程式碼是很重要的,因為它能提供額外的資訊。我們來看一個典型的“地址”上下文:

不好的程式碼示例:

string addressCity;
string addressHomeNumber;
string addressPostCode;

在大多數情況中,“郵政編碼”(PostCode)是地址的一部分,很顯然,郵政編碼不能單獨使用(除非你是在開發一個專門處理郵編的應用)。

所以,沒有必要在“PostCode”的前面加上“address”。而且,所有的這些資訊都應該有一個上下文環境,在面向物件程式設計中,這裡應該用一個“Address”類來表達這個地址資訊。

清晰的程式碼示例:

class Address{
   string city;
   string homeNumber;
   string postcode;
}

6、使用可搜尋的名稱

由一個字母組成的名稱,可能存在難以定位的問題。

數字常量也是如此。數值常量可以用常量變數代替。搜尋程式碼時,數字 8 可能會給你帶來很多麻煩。

但是,用常量 MAX_BLOCKS_DISPLAYED 替換它會使它變得更容易。

單字母名稱的唯一用例是簡短方法中的區域性變數。

廣州VI設計公司https://www.houdianzi.com

7、命名字首

不要使用字首。

例如,某些開發人員習慣在所有私有成員前面加上下劃線。別,你的類和方法應該足夠短小,以至於不需要任何這些字首。

或者,你可以使用 IDE(或安裝外掛),該 IDE 根據變數的範圍會為變數著色。

結論

這樣,你可以在程式碼中建立更有意義的名稱。

作為一名程式設計師你應該:

1、起的名字有意義,可以表達一個概念

2、要考慮名字的長度,名稱中只有必要資訊

3、符合“編碼規範”,有助於理解

4、一個概念不要多個名字混用

5、使用在背景領域和上下文中都有意義的名字