返回 網站動態
DevTool 團隊

變數命名與文字大小寫:camelCase、snake_case 與程式慣用風格

為什麼同一個變數名在不同語言裡長得不一樣?這篇講清 camelCase、snake_case、PascalCase、kebab-case 的慣用邊界與轉換規則:連續大寫怎麼拆、數字怎麼歸屬、中文混排怎麼處理,配上各語言的大小寫函式與快捷鍵,最後用線上工具批次轉換變數名清單。

為什麼變數名風格是「語言口音」

同一個概念,四種語言裡長這樣:userName(Java)、user_name(Python)、UserName(C# 公開屬性)、user-name(CSS 類名)。這不是隨意的——每種語言社群用自己的慣用風格寫程式碼,讀程式碼的人靠它一眼分辨「這是變數、是常數、還是類名」。PascalCase 開頭多半是類型,全大寫底線多半是常數,camelCase 是普通變數。混著寫的程式碼庫,review 的第一印象就是「不專業」。

風格遷移是真實需求:接手 Python 專案轉 Java、把設定鍵轉成環境變數、把 JSON 欄位的 snake_case 轉成前端的 camelCase。先給一張慣用邊界表,再講轉換的規則細節——最後用大小寫轉換工具批次處理。

風格 寫法 慣用場景
camelCase userName Java/JS/TS 變數與函式
PascalCase UserName 類名/類型/Go 導出
snake_case user_name Python/Ruby 變數、資料庫欄位
kebab-case user-name CSS 類、URL、檔名
CONSTANT_CASE USER_NAME 常數、C 巨集、環境變數
dot.case user.name 設定鍵、命名空間

轉換規則裡最容易踩的三個坑

手工轉換看起來只是加底線,但三個邊界決定了轉換品質:

1. 連續大寫怎麼拆。HTTPServer 應拆成 HTTP + Server(snake 得 http_server),而不是 https erver 或整串 httpserver。規則:連續大寫串的最後一個大寫字母若後面跟小寫,歸下一個詞。用這個輸入試任何轉換工具,一眼分辨品質。

2. 數字歸屬。parseJSON2x 的 2 黏著前面的詞(parse_json2x)比拆成 parse_json_2_x 更符合識別碼直覺;但 version2Beta 轉 snake 得 version2_beta 還是 version_2_beta 各家不一——本站工具採用「數字黏前不獨立」的口徑並全程一致。

3. 中文混排。已獲取 user_name 列表 轉 snake_case,中文應該保留(已獲取_user_name_列表)而不是被當成「非識別碼字元」刪掉。這對中文註解裡夾變數名的場景(code review、文件)是硬需求。

另外一個高頻輸入場景:全大寫文字轉 Title Case。ALL CAPS INPUT 的正確結果是 All Caps Input——即先把每個詞其餘字母小寫再首字母大寫;只加首字母不改其餘的工具會輸出 ALL CAPS INPUT(等於沒轉)。

各語言的大小寫函式與快捷鍵

改程式碼時的內建手段(批次處理文字用工具):

  • Python:"abc".upper() / .lower() / .title();sentence 式首字母用 .capitalize()
  • JavaScript:toUpperCase() / toLowerCase();Title Case 無內建,replace(/\S+/g, w => w[0].toUpperCase() + w.slice(1).toLowerCase())
  • C/C++:toupper()/tolower() 逐字元,配合 std::transform
  • 命令列:tr 'a-z' 'A-Z';sed 首字母大寫
  • 快捷鍵:JetBrains 系 Ctrl+Shift+U(選中循環切換);VS Code 裝 Change Case 類擴充綁定;Vim 可視模式 U/u/~

批次轉換的動線

真實場景裡要轉的往往是一列變數名、一份檔名清單、一段 JSON 欄位列表——字母大小寫轉換器為這個場景做了逐行批次模式:每行獨立轉換,user_name、getHTTPResponseCode、已獲取 user_name 列表 混排的清單一次貼上全部得到正確結果;關閉批次則把整段合併為一個識別碼(自然短語轉 snake/kebab 的 slug 用法)。轉換後配文字對比核對清單,JSON 欄位的風格遷移再接 JSON 格式化 檢視結構。

Frequently Asked Questions

camelCase 和 snake_case 應該選哪個?

跟隨語言的社群慣例:Java/JavaScript/TypeScript 用 camelCase 變數名,Python/Ruby 用 snake_case,Go 公開導出用 PascalCase、私有用 camelCase,CSS 類名與 URL 用 kebab-case,C 巨集與常數用 CONSTANT_CASE。團隊內部統一的優先級高於語言慣例本身——用線上大小寫轉換工具批次統一後,再配編輯器/linter 的命名規則固化。

變數名裡的連續大寫(如 HTTPServer)轉 snake_case 的正確結果是什麼?

http_server。規則是連續大寫串的最後一個大寫字母若後面跟著小寫,就歸到下一個詞:HTTPServer 拆成 HTTP + Server,XMLHttpRequest 拆成 XML + Http + Request。很多簡易轉換器會輸出 httpserver(丟掉邊界語義),選擇工具時用這兩個輸入試一下即可分辨。

各語言大小寫轉換的內建函式是什麼?

Python:str.upper()/lower()/title();JavaScript:toUpperCase()/toLowerCase();C++:toupper()/tolower() 逐字元配合 std::transform;Java:toUpperCase()/toLowerCase();命令列:tr 'a-z' 'A-Z'。批次處理文字用線上工具更快,改程式碼時用內建函式。

編輯器裡轉換大小寫的快捷鍵是什麼?

VS Code:擴充商店裝 Change Case 或 Transform 後可綁定快捷鍵,原生支援的是 Ctrl+Shift+U(轉大寫,部分鍵盤配置不同);JetBrains 系(IDEA/PyCharm):Ctrl+Shift+U 循環切換;Vim:可視模式 ~ / U / u;Emacs:M-u / M-l / M-c。