ภาษาไทยไม่มีแนวคิดเรื่องตัวพิมพ์ใหญ่-เล็กเลย และยิ่งไปกว่านั้น การเขียนภาษาไทยตามปกติไม่มีการเว้นวรรคระหว่างคำด้วยซ้ำ — คำต่อคำเรียงติดกันเป็นประโยคยาว ๆ โดยอาศัยความเข้าใจภาษาของผู้อ่านในการแบ่งคำ ไม่ใช่สัญลักษณ์ทางสายตาแบบตัวพิมพ์ใหญ่ที่ภาษาละตินใช้บอกจุดเริ่มต้นคำใหม่ (เช่นใน camelCase)
รูปแบบหลัก
- camelCase — คำแรกเป็นตัวพิมพ์เล็ก คำถัดไปขึ้นต้นด้วยตัวพิมพ์ใหญ่ ไม่มีตัวคั่น:
userNameมาตรฐานสำหรับตัวแปรและฟังก์ชันใน JavaScript, Java, C# - PascalCase — เหมือนกันแต่คำแรกก็ขึ้นต้นด้วยตัวพิมพ์ใหญ่ด้วย:
UserNameใช้สำหรับคลาสและคอมโพเนนต์แทบทุกที่ - snake_case — คำเชื่อมด้วยขีดล่าง ทั้งหมดเป็นตัวพิมพ์เล็ก:
user_nameมาตรฐานใน Python และชื่อคอลัมน์ฐานข้อมูล - kebab-case — คำเชื่อมด้วยขีดกลาง:
user-nameมาตรฐานสำหรับ URL, คลาส CSS และแอตทริบิวต์ HTML เพราะขีดล่างพบได้น้อยกว่าใน URL
ทำไมนี่ไม่ใช่แค่เรื่องความสวยงาม
เพราะการแบ่งคำในข้อความไทยจริง ๆ ต้องอาศัยพจนานุกรมหรือแบบจำลองภาษา ไม่ใช่การไล่หาจุดที่ตัวพิมพ์เปลี่ยนแบบที่เครื่องมือนี้ทำกับ XMLParser เครื่องมือแปลงเคสจึงใช้ได้จริงเฉพาะกับ identifier ที่เขียนด้วยอักษรละติน (เช่นคำแปลอักษรของคำไทยเป็นอังกฤษ) ไม่ใช่กับข้อความภาษาไทยที่เขียนด้วยอักษรไทยโดยตรง
ทำไมต้องใช้การแปลงนี้
- จับคู่ฟิลด์จาก JSON API (มักเป็น camelCase) กับชื่อคอลัมน์ฐานข้อมูล (มักเป็น snake_case)
- เปลี่ยนชื่อตัวแปรเมื่อย้ายโค้ดจากภาษาหนึ่งไปอีกภาษาที่มีธรรมเนียมต่างกัน
- สร้างชื่อที่ใช้ได้กับ URL หรือคลาส CSS จากข้อความหัวข้อที่ทับศัพท์เป็นอักษรละตินแล้ว
ความกำกวมกับตัวย่อ
Identifier อย่าง userID หรือ XMLParser ทำให้ตัวแปลงต้องเลือก: จะถือว่าตัวย่อนั้นเป็น "คำ" เดียว หรือแยกเป็นตัวอักษรทีละตัว เครื่องมือแต่ละตัวจัดการเรื่องนี้ต่างกัน — เครื่องมือนี้จะรู้จักลำดับตัวพิมพ์ใหญ่ติดกันว่าเป็นคำแยก (XMLParser → XML + Parser) แต่ควรตรวจผลลัพธ์ด้วยตาเปล่าหากชื่อนั้นจะถูกนำไปใช้ในโค้ด production ทันที