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

2022-07-09 01:06:13 字數 4242 閱讀 6388

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

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

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

在**中起名本身就是一門藝術!

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

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

程式設計大師 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還把它放到主頁面的專家專欄中,不過鬱悶的是把我的名字寫成了 陳技能 想起來從小時候到現在,...