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

程序員如何讓你的變量名更加精確

開發 后端
我們今天要講講程序員如何讓你的變量名更加精確,比如布爾值的變量名確定。還將用Java實例來給大家講。

[[49981]]

關鍵點

  別人還能把這個名字理解成什么意思?通過不斷的問自己這個問題來積極檢查每一個命名。

  事實上,這種富有創造性的、不斷嘗試“錯誤理解”的方法,能夠有效的發現歧義的命名,并修正它們。正如本文中的示例,我們將隨時通過“騎驢看唱本 ——邊走邊瞧”的方式來 探討所見到名字的誤解之處,然后選取一個更好的名字。

  示例:Filter()

  假設寫了一段代碼來操作數據庫結果的集合:

  results= Database.all_objects.filter("year <= 2011")

  那么,results包含什么數據呢?

  所有滿足year<=2011的對象

  所有滿足year<=2011的對象

  問題的由來是從filter這個有歧義的詞開始的,它沒有清楚表達它的意思是“選取”還是“剔除”。因此,應該避免使用filter,它太容易造 成誤解!

  如果這里想要的效果是“選取”,一個更好的名字是select;如果想要的是“剔除”,更好的名字則是exclude。

  為布爾值取名

  當為布爾值變量命名或者函數返回布爾值的時候,要特別注意真和假所表達出來的真實意思,這里就有一個很危險的例子:

  bool read_password= true;

  這句代碼意思取決于當時怎么閱讀的(沒有其他的意思了),顯然這里有兩種截然不同的理解:

  需要讀密碼

  密碼已經被讀過了

  在這個用例下,做好避免用單詞read,可以考慮使用need_password或者user_is_authenticated來代替。

  通常情況下,添加單詞ishascan或者should可以讓布爾值的意思更加清晰易懂。

  比如說有個函數叫SpaceLeft(),乍一看,就會想到這個函數返回的值是數字。如果需要明確返回值是布爾值,一個更好的名字是 HasSpaceLeft()。

  還有,盡量避免使用反義短句來命名。例如:

  bool disable_ssl= false;

  改成如下代碼則更容易理解,同時更契合原意:

  bool use_ssl= true;

  符合用戶期望

  很多名字是帶有誤導性的,因為對于某個名字,用戶自已有一個預想的定義,但是代碼的意思可能恰恰不是這個意思。如此情況下,***作出“讓步”并改 變名字,消除 誤導性。

  示例:get*()

  許多程序員都在使用這樣的編碼規范:某個方法以get開頭來表達一個“輕量級的訪問器”以返回內部成員。違反這個規范將很容易誤導用戶。 避免下面的例子中java代碼段的做法:

  public class StatisticsCollector { public void addSample(double x) { ... } public double getMean() { // Iterate through all samples and return total / num_samples } ...}

  這里,getMean的實現是枚舉過去所有的數據,并計算其平均值。如果數據量很大的時候,這一步的開銷將會是非常大的。但是,一個不了解情況的 程 序員則會很粗心的調用它并且假設這是一個很廉價的調用。

  因此,這個方法應該改名成類似computeMean()這樣的,看起來這樣就是一個代價高昂的操作了(或者,另一個選擇就是改寫其實現,變成一 個名副其實的輕量級操作)。

  示例:list::size()

  這里講一個C++標準庫里的命名問題。這段代碼導致的結果是,很難定位和修復類似導致服務器龜速運行之類的問題:

  void ShrinkList(list<Node>& list, int max_size) { while (list.size()>max_size) { FreeNode(list.back()); list.pop_back(); }}

  這樣的bug的導致是作者沒有意識到list.size()是一個O(n)復雜度的操作——它挨個計數鏈表的節點得出總數而不是返回已計算 好的總個數,這將導致ShrintList是一個O(n2) 的操作。

  從技術角度講,這段代碼沒有問題,也能通過所有的單元測試。但是當調用ShrintList()并傳入一個包含上億數量級的list時,它可能將 耗費數小時的時間。

  或許你會認為,這個是調用者的錯誤使用,他/她沒有認真仔細的閱讀相關的文檔!確實是這樣的,但是,事實上,這里的list.size()不是一 個恒準時(constant-time)操作,這太意外了!其他所有的C++容器類都是恒準時的size()方法呀。

  假如把size()更名成countSize()或者countElements(),類似的錯誤就會大大減少了。C++標準庫的實現者可能想的 是使用一個size()方法去和其他的容器匹配,像vector和map,這樣API的一致性看起來更好。正是由于這樣的做了,導致程序員容易誤 用并認為這是一個很快的操作,和其他的容器一樣!幸運的是,***的C++標準要求size()是O(1)復雜度。

原文鏈接:http://www.cnblogs.com/powertoolsteam/archive/2011/11/16/2250700.html

責任編輯:彭凡 來源: 博客園
相關推薦

2023-06-05 11:40:23

2024-01-04 08:23:02

PythonPDFPPT

2015-12-07 11:44:31

程序員厭倦工作

2015-12-09 09:17:11

情緒厭倦程序員

2016-04-28 11:17:33

互動出版網

2015-07-28 09:54:43

2014-09-05 10:15:41

函數式編程

2015-02-13 10:52:48

Java程序員

2015-03-23 09:57:48

程序員

2009-05-21 15:58:12

程序員工作經驗職場

2020-06-05 07:52:25

程序員離職編碼

2011-11-09 13:52:04

程序員

2025-03-11 08:30:00

Pythonretrying代碼

2013-06-17 11:01:49

程序員離職

2015-04-10 19:37:34

程序員

2010-07-29 11:00:59

程序員

2021-07-01 10:03:55

Distroless容器安全

2013-04-10 09:35:22

程序員

2011-07-20 09:11:58

C++

2012-12-28 09:58:50

程序員代碼編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频区 | 能免费看的av | 成人久草| 久久这里只有精品首页 | 国产一区91精品张津瑜 | 日本中出视频 | 色综合天天天天做夜夜夜夜做 | 久久久久国产成人精品亚洲午夜 | www性色 | 国产日韩欧美在线 | 成人99 | 亚洲欧洲在线看 | 国产成人精品一区二区 | 日韩视频在线观看一区二区 | 久久精品中文字幕 | 久久中文字幕电影 | 日韩人体视频 | 亚洲精彩免费视频 | 婷婷福利视频导航 | 一区二区三区视频在线 | 99久久成人 | 伊人春色成人网 | 成人免费在线观看 | 亚洲国产一区二区三区, | 久久久精彩视频 | 午夜国产 | 亚洲欧美日韩精品久久亚洲区 | 日韩国产三区 | 亚洲一区在线播放 | 成人在线中文字幕 | 黄色大片网| 成年人在线观看视频 | 99精品视频免费观看 | 亚洲成在线观看 | 欧美日韩亚洲一区 | 麻豆国产一区二区三区四区 | 日韩色综合 | 亚洲一区二区免费看 | 亚洲视频一区在线 | 黑人巨大精品欧美一区二区免费 | 九九久久国产精品 |