camelCase、snake_case 與 kebab-case:該用哪一種
camelCase 用於 JavaScript,snake_case 用於 Python 與資料庫,kebab-case 用於 CSS 與網址。說明各種命名慣例的適用場合,並提供免費轉換工具。
發布於 · 閱讀約 7 分鐘
camelCase、snake_case 與 kebab-case 的差別,主要取決於名稱會在哪裡使用。JavaScript 與 Java 使用 camelCase(firstName),Python、Ruby 與 SQL 使用 snake_case(first_name),CSS、HTML 屬性與網址則使用 kebab-case(first-name)。請遵循該語言的慣例與團隊的程式風格指南。若要在不同寫法之間轉換文字,免費大小寫轉換工具與免費網址 slug 產生器可以在瀏覽器中完成大部分工作。
三種命名的一覽
| 風格 | 範例 | 你會在哪裡看到 |
|---|---|---|
| camelCase | userFirstName |
JavaScript 與 TypeScript 的變數和函式、Java 方法、許多網路 API 的 JSON |
| PascalCase | UserFirstName |
大多數語言的類別名稱、React 元件、C# 方法 |
| snake_case | user_first_name |
Python 的變數與函式、Ruby、SQL 欄位名稱、許多 JSON API |
| SCREAMING_SNAKE_CASE | USER_FIRST_NAME |
許多語言的常數、環境變數 |
| kebab-case | user-first-name |
CSS 屬性與類別名稱、HTML 屬性、網址、檔案名稱、CLI 旗標 |
這些名稱來自它們的外形:camelCase 的每個新字都以大寫字母隆起,snake_case 的字在底線上平鋪排列,kebab-case 的字則像被連字號串起來。

各語言的做法
JavaScript 與 TypeScript。 變數與函式使用 camelCase(getUserName),類別與 React 元件使用 PascalCase(UserCard),常數通常使用 SCREAMING_SNAKE_CASE(MAX_RETRIES)。語言內建的功能也採用這種風格,例如 getElementById 與 toLowerCase。
Python。 Python 的風格指南 PEP 8 規定:函式、變數與模組名稱使用 snake_case,類別使用 CapWords(即 PascalCase),常數則使用大寫加底線。在 Python 中寫 getUserName 雖然能運作,但每位讀到它的 Python 開發者都會覺得格格不入。
CSS 與 HTML。 CSS 屬性使用 kebab-case(background-color、font-size),大多數類別命名系統也跟隨這種寫法(.nav-item、.card-title)。HTML 的 data- 屬性同樣是 kebab-case,瀏覽器會把它們轉換給 JavaScript 使用:data-user-id 會變成 element.dataset.userId。這一行很好地說明了為什麼兩種慣例並存。
SQL 與資料庫。 欄位與資料表名稱通常使用 snake_case(created_at、order_items)。許多資料庫會把未加引號的名稱統一成同一種大小寫,所以 createdAt 可能在你不知情的情況下變成 createdat,除非每次都加上引號。snake_case 可以避免這個問題。
網址與檔案名稱。 請使用 kebab-case。Google 的網址結構指南建議用連字號而非底線來分隔單字,因為連字號能清楚標示字與字的界線。全部小寫也能避免伺服器把 About.html 與 about.html 當成不同檔案而造成連結失效。請參閱什麼是網址 slug與我們的網址 slug 最佳實務。
JSON 與 API。 沒有單一規則。許多以 JavaScript 為主的 API 使用 camelCase,許多以 Python 或 Ruby 為後端的服務則回傳 snake_case。每個 API 選定一種,並且不要在同一個回應中混用。
哪一種最好讀?
三種在習慣之後都很好讀。幾個實際差異:
- snake_case 與 kebab-case 的字與字之間有清楚的間隔,對於較長的名稱與縮寫很有幫助(
html_parser對比htmlParser對比HTMLParser)。 - camelCase 比較短,不需要額外的符號。
- kebab-case 在大多數語言中不能用作變數名稱,因為
user-name會被讀成「user 減 name」。 - 在大多數編輯器中,連按兩下可以選取整個 snake_case 或 camelCase 名稱,但在 kebab-case 中通常只會在連字號處停下。
真正的原則是一致性。若一個檔案同時出現 userName、user_name 與 UserName,會比全部使用同一種風格更難閱讀。
轉換格式
當資料需要在不同層之間移動時,就必須轉換:例如把 Python API 的 created_at 變成 JavaScript 的 createdAt,把頁面標題變成網址,或把設定名稱變成環境變數。
轉成 kebab-case 或 snake_case:使用 slug 產生器。 每行貼上一個名稱,然後選擇 連字號 (-) 得到 kebab-case,或選擇 底線 (_) 得到 snake_case。它會把所有字母轉為小寫、把重音字母轉為一般字母,並刪除符號。它會把任何符號視為單字的分隔,所以 user_first_name 會變成 user-first-name,反過來也一樣。不過它不會拆開 camelCase:userFirstName 會變成 userfirstname。請先在單字之間加上空格。
轉成 SCREAMING_SNAKE_CASE。 先在 slug 產生器中產生 snake_case 版本,然後貼到免費大小寫轉換工具並按一下 全部大寫。反過來,全部小寫 會把 MAX_RETRIES 變成 max_retries。
轉成 camelCase 或 PascalCase。 沒有一鍵按鈕。最快的方法:先用空格輸入單字,在大小寫轉換工具中按一下 每字首字大寫(user first name 會變成 User First Name),然後刪除空格;若要 PascalCase 就結束,若要 camelCase 則把第一個字母改成小寫。
程式碼中的大量名稱。 若要大量重新命名,請使用編輯器的正規表示式尋找與取代功能。先在免費正規表示式測試工具中測試樣式:例如 _([a-z]) 會找到每個後面接字母的底線,也就是 snake_case 轉成 camelCase 時需要改成大寫的位置。許多編輯器可以在取代內容中把擷取的字母轉為大寫,語法請參閱編輯器的說明文件。
轉換時要注意的事
- 縮寫。 決定要用
userId還是userID、HtmlParser還是HTMLParser,並保持一致。 - 數字。
address_line_2轉換正常;addressLine2也沒問題;只是不要把數字丟掉。 - 公開名稱。 重新命名 JSON 欄位或網址會影響使用它的人。網址要加上轉址,API 則要在一段時間內讓舊欄位名稱仍然可用。
立即轉換你的文字
使用免費大小寫轉換工具進行全部大寫、全部小寫與每字首字大寫的轉換,使用 slug 產生器處理 kebab-case 與 snake_case。兩者都在瀏覽器中執行,你貼上的內容也不會離開你的裝置。
常見問題
- camelCase 與 snake_case 有什麼差別?
- camelCase 把單字連在一起,並把第一個字之後的每個字首字母大寫(
firstName)。snake_case 讓單字保持小寫,並用底線連接(first_name)。 - JSON 應該用 camelCase 還是 snake_case?
- 兩者都可以。配合你大多數用戶端使用的語言,並在同一個 API 中保持一致。
- 為什麼 CSS 使用 kebab-case?
- CSS 的設計就是使用帶連字號的屬性名稱,例如
font-size,而類別名稱通常也遵循相同風格。大多數程式語言的變數名稱不能含連字號,這就是為什麼 JavaScript 對同樣的屬性使用 camelCase。 - kebab-case 適合用於網址嗎?
- 適合。Google 建議用連字號分隔網址中的單字,而全部小寫可以避免大小寫敏感的問題。
- 大小寫轉換工具能做出 camelCase 嗎?
- 不能一鍵完成。請使用每字首字大寫,然後刪除空格並把第一個字母改成小寫。若要 kebab-case 與 snake_case,請使用網址 slug 產生器。
文字工具
試試英文大小寫轉換
免費、免註冊,在瀏覽器中就能用。 貼上文字,一鍵轉成 UPPERCASE、lowercase、Sentence case、Title Case 或 Capitalized Case,然後複製使用。