Brian的雜記
  • Introduction
  • Brian's 雜記
    • My Awesome API
    • FB 大頭貼
    • 硬體雜記
    • PHP
    • project
      • 模擬器
      • WAMP
    • WinMerge
    • 雜記
      • LINQ
      • 方法
      • Grid View
      • namespace
      • global
      • 物件導向
      • Excel
      • VS2017
      • single sign on
      • Master
      • Https
      • 憑證
      • 略過憑證不符
      • NLog
      • 團隊開發
      • .NET Core
      • 共用網路上的芳鄰
      • 爬蟲
      • NPOI
      • RSS
      • 多執行緒
      • 記憶體回收
      • 密碼學
        • BCrypt
        • AES
      • 主機環境建置
      • Session
      • Error
      • IIS 相關
      • 無障礙相關
      • 介面
        • 影像地圖
      • telnet
        • smtp
      • nslookup
      • 協助客戶解決問題
      • 驗證欄位
      • 網站管理
      • 工具整理
    • 正規表示法
    • 影像處理
    • IntelliJ Idea
    • 觀念
      • Clean Code
        • 命名
        • 函式
        • 註解
        • 編排
        • 物件及資料結構
        • 錯誤處理
        • 邊界
        • 單元測試
        • 類別
      • Java 程式風格
      • Design Pattern
        • 單例模式
      • 同步
      • 畫圖
        • ER-Model
        • 類別圖
        • Use Case
        • 有限狀態機
      • 資料 API 文件 分析
      • CORS & SSL
      • 利用DISC幫助溝通
      • OAS
    • 檔案上傳
      • FileStore
      • App Engine
      • Google Storage
    • OAuth vs Open ID
    • MIME
    • 虛擬桌面
    • 待看資料
    • Selenium
    • CDN
    • HTTP
    • 編碼
    • 2nd-ML100Days
      • jupyter
    • 微服務
      • 設計
        • 1 ~ 5
        • 6
        • 7
        • 8
        • 9
    • Gradle
    • Maven
    • Error
    • 批次檔 BAT
    • Kurento
    • WebSocket & WebRTC
  • 需求面能力
    • User Story
  • Google Cloud Platform
    • Compute Engine
  • Python
    • 基本語法
    • Pandas
    • 套件
    • Matplotlib
    • Encoder
    • jupyter
  • Java
    • Java
      • File
      • Exception
      • 物件導向觀念
      • 加密
      • HTTP
      • 集合
      • Stream()
      • Web
      • ResultSet
      • JDK6
      • JDK8
    • 讀取、複寫MP3 Tag
    • Log4j2
    • Servlet
      • 容器
    • JSP
    • JBOSS
    • JWT
    • PreparedStatement
    • Error
    • Spring
      • Spring Boot
        • @Value
        • Build
      • RequestParameter
      • Error
      • Autowired
      • JPA
      • FeignClient
      • WebSocket
      • thymeleaf
      • Security
      • Test
      • Scheduled
      • Redirect
    • IntelliJ
  • Linux
    • Linux
    • Shell Script
    • Cygwin(在Windows執行Linux指令)
  • 前端
    • HTML
      • Link
    • CSS
      • Position
      • padding color
      • display
    • JS
      • jQuery
        • Select2
      • fancybox
      • ES6
      • 效能
      • GoogleMap API
        • Marker
        • InfoWindow
      • 事件
      • CKEditor
      • TGOS
      • JSON
      • QRcode
      • 核心概念
        • 物件 變數 型別
          • number
          • String
          • boolean
          • null & undefined
          • Symbol
        • JS 物件概念
        • 深入理解JS 函式物件
        • 更多ES2015/ES6 全新語言特性
      • Promise
    • 效果應用
  • 資料庫
    • 注意事項
    • MariaDB
    • MySQL
      • inner join 和 join
      • 字串比對
      • 倒數資料
    • SQL
      • DDL 資料定義語言
      • DML 資料操縱語言
      • DCL 資料控制語言
      • TCL 交易控制語言
      • T-SQL
      • CTE
      • JOIN
    • Oracle
    • MSSQL 操作
      • 新增使用者
      • SQL 指令
      • Sequence
    • 差異比較
    • MyBatis
    • Workbench 操作
    • SQL Injection
  • 版本控制
    • Gitlab
      • sign up
      • sign in
      • add project
      • add members
    • SourceGit
      • install
    • SmartGit
      • install
      • operate
      • git 操作雜記
    • TortoiseGit
    • Git
    • TFS
    • SVN
  • Test
    • 軟體測試原則
    • 演算法
    • XMind
      • install
    • Jenkins
      • 建置
    • HTTPie
    • Postman
    • 測試驅動開發
    • 撰寫測試的觀念
    • 測試框架
    • IoC & DI
    • 隔絕相依性的方式
    • JUnit
    • NUnit
    • 習慣
    • 虛設常式
  • Angular
    • hello world
    • ng-options
    • ES6
    • Build & Conponect
    • HttpClient
    • 部署
  • ASP.NET Web Form
    • Chapter 2
      • 2-1
        • 小東西
    • 略過請求驗證
  • Go
Powered by GitBook
On this page
  • 如果為了更好的可讀性、可以違反下列規則
  • Naming Conventions
  • General Naming Conventions
  • Specific Naming Conventions
  • new[ClassName]

Was this helpful?

  1. Brian's 雜記
  2. 觀念

Java 程式風格

如果為了更好的可讀性、可以違反下列規則

以下建議是為了增加可讀性,使程式碼容易被了解、維護、較一致。

Naming Conventions

General Naming Conventions

package 全小寫

com.company.application.ui

資料型態(Type)必須是名詞,開頭大寫,大小寫並用,駝峰

AudioSystem

變數命名 開頭小寫,大小寫並用,駝峰

audioSystem

這樣的方式,可以容易將型態和變數做區隔,避免潛在的宣告衝突。

常數的命名(final的變數) 全大寫,並使用 "_" 來分隔每個 key words

COLOR_RED

Method的名稱必須是動詞,開頭小寫,大小寫並用,駝峰

getName()

命名時,"不要"將專有名詞的縮寫或簡稱全部大寫

exportHtmlSource()

私有成員變數 的命名,在後面加 (_)

private String name_;

除了變數的名稱和型態,最重要的就是有效範圍。 利用(__) 可以很容易跟暫存變數做區別。 對於我們來說,class variable 比 method variable 更重要也更有意義。 所以class variable 應該被突顯。 對 setter method 來說,也可輕易找到合理的參數名稱,避免混淆 (__)建議加在後面,因為可讀性比較好

共用的變數名稱,應該和資料型態(Type)有一樣的命名

void setTopic(Topic topic)

NOT: void setTopic(Topic value)

減少使用不同的 專有名詞 or 不同名稱 的數量,可降低複雜性。且可從變數名稱輕易推斷出型態。 如果某些理由讓此慣例變得不洽當,這強烈地意味著此型態(Type)的定義或命名並不洽當。 非共用的變數名稱都有其扮演的角色,可結合角色與型態,來命名這些變數, 例如: Point startingPoint, centerPoint;

所有的命名都應以英文(English)來書寫

變數在命名時,當使用的範圍較大者 命名可以長一點,反之 使用範圍較小 命名就短一點。

暫時儲存所用的變數或索引(index) 的命名最好短一點,我們在看的時候,就可以假設他不會被其他地方用到。 一般整數的暫存變數,會命名為 i, j, k, m, n 而字元(character)則會命名為 c, d

倘若Method 命名裡的某些單字意義,若已隱含在物件的名稱裡,就可以拿掉

line.getLength();

NOT: line.getLineLength();

Specific Naming Conventions

物件的屬性若要被存取,必須要透過 get/set 的方法

person.getName();
person.setName("Brian");

布林變數或方法的命名,應以 is 開頭

isSet, isVisible, isFinished

is 開頭已經取代了不佳的布林命名,EX:status, flag 避免使用 isStatus or isFlag 這樣過於抽象的命名,可幫助我們選擇更有意義的名字。 設定布林成員的方法,其名稱開頭必須為 set,EX: void setFound(boolean isFound); 在某些情況下,可以用 has、can、should 等字眼來取代 is,會更為恰當 boolean hasLicense(); boolean canEvaluate(); boolean shouldAbort = false;

可在負責計算的方法命名中,加入compute來表示

valueSet.computeAverage()

"Compute" 這個字眼可以立即提醒我們 這是很耗時的操作,若有重複使用,可以先把結果暫存起來 一致性的使用,對於可讀性是有幫助的

*

new[ClassName]

某物件需要透過別的物件(工廠)方法來呼叫產生,命名應為 new[ClassName]。

例如:

class PointFactory 
{     
    public Point newPoint(...)     
    {         
        ...     
    } 
} ///:~

代表Point這個物件的產生是被管制的,使用者應該使用此方法來產生物件,而不是直接 new Point();

Previous類別NextDesign Pattern

Last updated 5 years ago

Was this helpful?