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

簡單聊聊編程頭疼的事情之一命名

開發 前端
編程過程中,有太多太多讓我們頭疼的事情了,比如命名、維護其他人的代碼、寫測試、與其他人溝通交流等等。

 [[329484]]

本文轉載自微信公眾號「 JavaGuide」作者Guide哥,轉載本文請聯系 JavaGuide公眾號。

編程過程中,有太多太多讓我們頭疼的事情了,比如命名、維護其他人的代碼、寫測試、與其他人溝通交流等等。就連世界級軟件大師 Martin Fowler 大神都說過 CS 領域有兩大最難的事情,一是緩存失效,一是程序命名(@https://martinfowler.com/bliki/TwoHardThings.html)。

 

今天 Guide 就單獨拎出 “命名” 來聊聊,據說之前在 Quora 網站,由接近 5000 名程序員票選出來的最難的事情就是“命名”。

為什么需要重視命名?

好的命名即是注釋,別人一看到你的命名就知道你的變量、方法或者類是做什么的! 好的命名對于其他人(包括你自己)理解你的代碼有著很大的幫助!

簡單舉個例子說明一下命名的重要性。

《Clean Code》這本書明確指出:

“好的代碼本身就是注釋,我們要盡量規范和美化自己的代碼來減少不必要的注釋。若編程語言足夠有表達力,就不需要注釋,盡量通過代碼來闡述。舉個例子:去掉下面復雜的注釋,只需要創建一個與注釋所言同一事物的函數即可

  1. // check to see if the employee is eligible for full benefits 
  2. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) 

應替換為

  1. if (employee.isEligibleForFullBenefits()) 

常見命名規則以及適用場景

這里只介紹 3 種最常見的命名規范。

駝峰命名法(CamelCase)

駝峰命名法應該我們最常見的一個,這種命名方式使用大小寫混合的格式來區別各個單詞,并且單詞之間不使用空格隔開或者連接字符連接的命名方式

大駝峰命名法(CamelCase)

類名需要使用大駝峰命名法(UpperCamelCase)

正例:

  1. ServiceDiscovery、ServiceInstance、LruCacheFactory 

反例:

  1. serviceDiscovery、Serviceinstance、LRUCacheFactory 

小駝峰命名法(lowerCamelCase)

方法名、參數名、成員變量、局部變量需要使用小駝峰命名法(lowerCamelCase)。

正例:

  1. getUserInfo()、createCustomThreadPool()、setNameFormat(String nameFormat) 
  2. Uservice userService; 

反例:

  1. GetUserInfo()、CreateCustomThreadPool()、setNameFormat(String NameFormat) 
  2. Uservice user_service 

蛇形命名法(snake_case)

測試方法名、常量、枚舉名稱需要使用蛇形命名法(snake_case)

在蛇形命名法中,各個單詞之間通過下劃線“_”連接,比如should_get_200_status_code_when_request_is_valid、CLIENT_CONNECT_SERVER_FAILURE。

蛇形命名法的優勢是命名所需要的單詞比較多的時候,比如我把上面的命名通過小駝峰命名法給大家看一下:“shouldGet200StatusCodoWhenRequestIsValid”。感覺如何?相比于使用蛇形命名法(snake_case)來說是不是不那么易讀?**

正例:

  1. @Test 
  2. void should_get_200_status_code_when_request_is_valid() { 
  3.   ...... 

反例:

  1. @Test 
  2. void shouldGet200StatusCodoWhenRequestIsValid() { 
  3.   ...... 

串式命名法(kebab-case)

在串式命名法中,各個單詞之間通過下劃線“-”連接,比如dubbo-registry。

建議項目文件夾名稱使用串式命名法(kebab-case),比如 dubbo 項目的各個模塊的命名是下面這樣的。

 

常見命名規范

Java 語言基本命名規范

1.類名需要使用大駝峰命名法(UpperCamelCase)風格。方法名、參數名、成員變量、局部變量需要使用小駝峰命名法(lowerCamelCase)。

**2.測試方法名、常量、枚舉名稱需要使用蛇形命名法(snake_case) **,比如should_get_200_status_code_when_request_is_valid、CLIENT_CONNECT_SERVER_FAILURE。并且,測試方法名稱要求全部小寫,常量以及枚舉名稱需要全部大寫。

3.項目文件夾名稱使用串式命名法(kebab-case),比如dubbo-registry。

4.包名統一使用小寫,盡量使用單個名詞作為包名,各個單詞通過 "." 分隔符連接,并且各個單詞必須為單數。

正例:org.apache.dubbo.common.threadlocal

反例:org.apache.dubbo.common.threadLocal

5.抽象類命名使用 Abstract 開頭。

  1. //為遠程傳輸部分抽象出來的一個抽象類(出處:Dubbo源碼) 
  2. public abstract class AbstractClient extends AbstractEndpoint implements Client { 
  3.  

6.異常類命名使用 Exception 結尾。

  1. //自定義的 NoSuchMethodException(出處:Dubbo源碼) 
  2. public class NoSuchMethodException extends RuntimeException { 
  3.     private static final long serialVersionUID = -2725364246023268766L; 
  4.  
  5.     public NoSuchMethodException() { 
  6.         super(); 
  7.     } 
  8.  
  9.     public NoSuchMethodException(String msg) { 
  10.         super(msg); 
  11.     } 

7.測試類命名以它要測試的類的名稱開始,以 Test 結尾。

  1. //為 AnnotationUtils 類寫的測試類(出處:Dubbo源碼) 
  2. public class AnnotationUtilsTest { 
  3.   ...... 

POJO 類中布爾類型的變量,都不要加 is 前綴,否則部分框架解析會引起序列化錯誤。

如果模塊、接口、類、方法使用了設計模式,在命名時需體現出具體模式。

命名易讀性規范

1.為了能讓命名更加易懂和易讀,盡量不要縮寫/簡寫單詞,除非這些單詞已經被公認可以被這樣縮寫/簡寫。比如 CustomThreadFactory 不可以被寫成 ~~CustomTF 。

2.命名不像函數一樣要盡量追求短,可讀性強的名字優先于簡短的名字,雖然可讀性強的名字會比較長一點。 這個對應我們上面說的第 1 點。

3.避免無意義的命名,你起的每一個名字都要能表明意思。

正例:UserService userService; int userCount;

反例: UserService service int count

4.避免命名過長(50 個字符以內最好),過長的命名難以閱讀并且丑陋。

5.不要使用拼音,更不要使用中文。 注意:像 alibaba 、wuhan、taobao 這種國際通用名詞可以當做英文來看待。

正例:discount

反例:dazhe

Codelf:變量命名神器?

這是一個由國人開發的網站,網上有很多人稱其為變量命名神器, Guide 在實際使用了幾天之后感覺沒那么好用。小伙伴們可以自行體驗一下,然后再給出自己的判斷。

Codelf 提供了在線網站版本,網址:https://unbug.github.io/codelf/,具體使用情況如下:

我選擇了 Java 編程語言,然后搜索了“序列化”這個關鍵詞,然后它就返回了很多關于序列化的命名。

 

并且,Codelf 還提供了 VS code 插件,看這個評價,看來大家還是很喜歡這款命名工具的。

 

總結Guide 制作了一個涵蓋上面所有重要內容的思維導圖,便于小伙伴們日后查閱。

 

 

 

責任編輯:武曉燕 來源: JavaGuide
相關推薦

2020-11-12 19:02:43

命名編程編碼

2021-02-04 15:08:37

Vue漸進式框架

2023-04-19 09:05:44

2020-04-09 13:40:28

C語言操作系統Java

2013-11-01 17:24:39

程序員命名

2020-02-21 10:44:21

網絡安全態勢感知漏洞分析

2014-07-31 10:57:15

Android組件Service

2018-09-19 07:33:03

開源儲存系統

2017-03-27 21:59:57

TDD開發編程

2021-08-10 19:15:17

語言編程應用

2012-03-08 21:54:20

Windows Pho

2020-11-05 12:56:19

Python辦公自動化

2023-08-10 08:28:46

網絡編程通信

2011-05-31 09:51:23

編程語言

2024-03-19 08:15:09

云原生云計算容器

2023-11-29 08:26:38

2022-02-23 09:03:29

JavaScript開發命名約定

2023-03-26 22:42:02

SQL關聯索引

2022-02-11 14:39:11

游戲JS鴻蒙

2022-08-02 20:21:42

開源項目工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品免费 | 在线黄 | 国产精品久久久久久久久图文区 | 国产一区二区在线免费观看 | www国产精 | 久久久久久国产精品mv | 免费看黄视频网站 | 久久久看| 久久av一区| 亚洲激情av | 日韩一区二区三区在线视频 | 狠狠躁18三区二区一区 | 欧美一区2区三区4区公司二百 | 特级做a爰片毛片免费看108 | 久久av在线播放 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 91欧美 | 午夜成人免费视频 | 日韩在线播放第一页 | 国产91久久精品一区二区 | 91亚洲一区 | av免费成人 | 亚洲一区二区三区在线播放 | 免费特级黄毛片 | 国产精品一区三区 | 久久久精品一区 | 日韩在线国产精品 | 天天综合久久网 | 国产成人精品久久二区二区 | 久久久这里只有17精品 | 精品欧美一区二区三区久久久 | 欧美一区二区 | 久久精品亚洲一区二区三区浴池 | 欧美aⅴ| 一区二区三区精品在线 | 日韩成人精品一区二区三区 | 国产一级在线 | 欧美精品久久久久久久久老牛影院 | 欧美啪啪 | 久久久av | 一区二区三区回区在观看免费视频 |