亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android開發中如何使命名更可讀?——命名語義規范實踐

2019-11-09 18:30:28
字體:
來源:轉載
供稿:網友

本文為 一旬一題寫作計劃 中 重構 專題內文章,讀完本篇大約需要4分鐘。


合理正確的命名簡直是編程時最常頭疼的問題之一(僅次于寫文檔),我的強迫癥同事每次寫新需求的代碼時候都要為此糾結半天。 我們會使用像下面這種,大家提到最多的,類似“格式規范”的命名規范: Google java編程風格指南中文版 Code Style for Contributors 這種規范規定了命名的格式,大大降低了代碼混亂度,但是對可讀性的貢獻卻還不夠。 好的代碼應該表達出自己的功能,望文知義是我們的追求。

/*能讀,不好讀*/houzi.food(b) // the money eats a banana/*望文知義,與自然語言(右側的注釋)很接近*/monkey.eat(banana) // the money eats a banana

我們開發中可能60%的時間都花在命名和閱讀代碼上了,如何讓代碼更“可讀”(更有語義),是個值得花時間琢磨的問題。這篇文章將會介紹些讓命名更具語義的實踐。

命名的基礎

命名必須傳遞足夠的信息。 通常,對象代表一個事物概念,我們使用名詞來命名。用名詞的復數或加上 List 、 Map 后綴來命名集合。函數都是用來做事情的,函數的名字應該由動詞開始。 于是我們建立了最基礎的規則:名詞命名對象,動詞命名函數。

少用get

我們編寫的大多數函數有個返回值,所以用動詞get開頭特別常見。對于簡單訪問對象屬性的方法,get還是蠻適合的,比如POJO和JavaBean的數據獲取方法。 但是多數情況下,get并不是一個好的選擇。想象有一個方法,它會連接到遠程服務器,搜索某個數據集,并將其排序后返回。我們可以把它叫做 getData,但這樣的命名就沒能提供足夠的信息,跟從本地獲取數據或者簡單訪問JavaBean沒有任何區別,讀者也無法猜測這個函數會做出些什么。如果換成fetchUserInfoAsync()之類的,函數的目的就一目了然了,讀者得到了函數做了更多的工作來提取數據的暗示。 我們可以提煉出一條新規則,即時直接訪問數據時用get,其他更復雜的情況應當另選更精確的動詞。比如做數學運算得出一個返回值的函數,calculate 會比 get 合適。

試下給下面的函數選個動詞。

Item getItem(Item match) { for(Item temp : itemList){ if(temp.values == match.values){ return temp; } }}

看看這個函數干了什么,不是簡單地獲取某個數據,它在集合中搜索某個符合條件的元素并返回。searchItem或者findItem都是容易想到而且很不錯的選擇。試下描述函數的功能,從中摘取動詞,就是這么簡單。

不用do

有的人喜歡用do命名,仔細想想,每個函數都有do一些事情,do 幾乎不能提供任何有用信息。類似的詞語還有handle, perform, return。

用情態動詞搭配Boolean返回值函數

Boolean返回值函數最適合用 is, are, was, were開頭,或者搭配情態動詞。

情態動詞(Modal verbs)本身有一定的詞義,表示語氣的單詞。但是不能獨立作謂語,只能和動詞原形一起構成謂語。情態動詞用在行為動詞前,表示說話人對這一動作或狀態的看法或主觀設想。

也就是can, could, may, might, must, shall, should, will 和 would,這些詞隱含了假設當前條件為真的反問信息。比如Button.isEnabled(),User.canaccess()。

注意上下文是否已暗示主語

Java語言中,方法是某個類里面定義的一個函數,也就是方法跟類是有綁定關系、在類或者對象的上下文中運行。所以有時候函數名中沒必要再描述主語。比如一個保存信息的方法,可以叫做saveMessage();假如這是Message類的一個方法,就可以簡化為save()。你可以對比感受下Message.save()和Message.saveMessage()。

不在函數名中描述參數

函數的簽名本身就告訴了讀者有什么參數,再在方法名中描述就多余了。findUserByUserIdAndToken(String userId, String token) 可以簡化成 findUser(String userId, String token)。

總結

名詞命名對象,動詞命名函數。少用動詞get避免使用do之類含糊不清的動詞用情態動詞搭配Boolean返回值函數不在函數名中描述參數從上下文和函數具體完成的任務出發,選用準確的描述

雖然不是必要的,但如果遵循這種語義規范(況且也不難),能讓我們的代碼很清楚地表達出它的關鍵邏輯。重構過代碼的同學應該明白這種代碼的自描述性有多重要。

任何一個傻瓜都能寫出計算機可以理解的代碼,唯有寫出人類容易理解的代碼,才是優秀的程序員。 ——《重構:改善既有代碼的設計》

錯誤代碼的影響力是有限的,bug很快會遁形;但能正確執行的無法理解的混亂代碼卻會造成長遠的負面影響。多花一丟丟時間去提升代碼的清晰度,后面的開發才會更愉悅。

參考資料與擴展閱讀

Semantic method naming

編寫「可讀」代碼的實踐

Google Java編程風格指南中文版

Code Style for Contributors


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久91精品国产91久久久| 亚洲综合精品伊人久久| 久久的精品视频| 国产精品99久久久久久久久| 亚洲精品欧美日韩专区| 精品一区二区三区电影| 成人写真福利网| 国产精品1234| 欧美日本高清一区| 国产成人涩涩涩视频在线观看| 久久这里有精品视频| 欧美性感美女h网站在线观看免费| 亚洲精品xxxx| 国产偷国产偷亚洲清高网站| 久久精品一区中文字幕| 成人激情综合网| 亚洲性生活视频| 久久精品久久久久久| 国产精品美女av| 欧洲午夜精品久久久| 国产欧美 在线欧美| 中文字幕在线看视频国产欧美在线看完整| 久久天天躁狠狠躁夜夜av| 91亚洲精品久久久| 亚洲精品久久久久久久久久久久久| 欧美丰满少妇xxxxx做受| 欧美电影免费看| 国产91精品青草社区| 亚洲四色影视在线观看| 亚洲欧美变态国产另类| 91午夜在线播放| 日本免费一区二区三区视频观看| 国产成人精品a视频一区www| 欧美丰满片xxx777| 精品动漫一区二区三区| 久久久免费高清电视剧观看| 国产日韩欧美在线视频观看| 亚洲国内高清视频| 久久久国产精品免费| 欧美日韩国产va另类| 欧美重口另类videos人妖| 亚洲精品成a人在线观看| xvideos成人免费中文版| 久久中文精品视频| 亚洲色图在线观看| 色综合男人天堂| 国产精品一二区| 欧美日韩精品国产| 欧美精品久久久久久久| 国产a∨精品一区二区三区不卡| 国产丝袜一区二区三区免费视频| 国产v综合ⅴ日韩v欧美大片| 亚洲黄色av网站| 亚洲老板91色精品久久| 亚洲综合在线做性| 亚洲精品小视频在线观看| 国产欧美精品xxxx另类| 日本免费一区二区三区视频观看| 亚洲xxxxx电影| 久久视频在线看| 日韩av免费网站| 欧美插天视频在线播放| 亚洲精品资源美女情侣酒店| 久久激情五月丁香伊人| 国产日韩欧美影视| 97碰在线观看| 欧美日韩在线视频首页| 欧美精品成人91久久久久久久| 亚洲福利在线视频| 日韩欧美国产中文字幕| 国产精品福利网| 久久偷看各类女兵18女厕嘘嘘| 国产精品女人久久久久久| 亚洲级视频在线观看免费1级| 国产精品激情av在线播放| 国产亚洲视频中文字幕视频| 久久久欧美一区二区| 欧美日在线观看| 91福利视频在线观看| 久久久精品免费视频| 亚洲精品影视在线观看| 在线成人中文字幕| 日韩中文字幕在线精品| 亚洲一区久久久| 国产成人精品久久二区二区| 亚洲人精品午夜在线观看| 久久影视电视剧免费网站清宫辞电视| 国产亚洲精品久久久久久| 疯狂蹂躏欧美一区二区精品| 久久99精品久久久久久琪琪| 久久久精品网站| 91香蕉嫩草影院入口| 免费不卡欧美自拍视频| 成人黄色午夜影院| 国产欧美精品va在线观看| 国产91九色视频| 91国产精品视频在线| 欧美丰满老妇厨房牲生活| 国产97免费视| 久久久久亚洲精品成人网小说| 欧美寡妇偷汉性猛交| 久久精品99久久久香蕉| 美女扒开尿口让男人操亚洲视频网站| 中文字幕日韩欧美在线| 亚洲成色999久久网站| 日本久久久久久久| 国产精品h在线观看| 日韩精品在线影院| 2020欧美日韩在线视频| 国产精品视频区| 久久精品国产综合| 午夜精品福利电影| 久久精品亚洲一区| 日韩欧美在线视频日韩欧美在线视频| 久久天天躁狠狠躁老女人| 俺去了亚洲欧美日韩| 成人黄色短视频在线观看| 国产99久久精品一区二区永久免费| 91久久夜色精品国产网站| 一本一本久久a久久精品综合小说| 欧美成人在线免费视频| 97成人精品区在线播放| 欧美在线视频免费| 成人网在线免费看| 日韩中文理论片| 日韩美女写真福利在线观看| 国产ts人妖一区二区三区| 亚洲第一综合天堂另类专| 国产一区二中文字幕在线看| 中文字幕日韩免费视频| 亚洲天堂成人在线| 亚洲最大福利视频网| 2019精品视频| 欧美性xxxx极品高清hd直播| 欧美电影免费观看高清完整| 国产欧美日韩精品在线观看| 青草成人免费视频| 欧美日韩成人免费| 成人黄色短视频在线观看| 国产精品久久久久影院日本| 精品高清一区二区三区| 亚洲天堂视频在线观看| 91福利视频在线观看| 欧美一级视频免费在线观看| 色先锋资源久久综合5566| 久久精品91久久久久久再现| 国产精品欧美日韩| 在线电影欧美日韩一区二区私密| 亚洲精品美女久久久久| 亚洲综合日韩在线| 欧美一级大片在线观看| 国内精品久久久久伊人av| xvideos国产精品| 日韩在线观看免费网站| 久久精品久久久久电影| 国产69精品99久久久久久宅男| 亚洲国产女人aaa毛片在线| 国产综合在线视频| 欧美黑人性视频| 亚洲精品720p| 亚洲国产美女精品久久久久∴| 2019中文字幕在线| 亚洲视频欧美视频| 日本精品免费一区二区三区|