Chữ "Đ" trong tiếng Việt là một chữ cái độc lập, không phải "D" có gạch ngang trang trí — tương tự "đ" và "d" là hai chữ khác nhau về mặt ngôn ngữ, xếp cạnh nhau nhưng khác vị trí trong bảng chữ cái. Về mặt Unicode, "Đ"/"đ" là các ký tự có sẵn (U+0110/U+0111), nên việc chuyển hoa/thường của chúng hoạt động bình thường như mọi chữ cái Latin khác — khác hẳn với các dấu thanh (sắc, huyền, hỏi, ngã, nặng) vốn là ký tự tổ hợp riêng đè lên nguyên âm.
Các kiểu chính
- camelCase — từ đầu tiên viết thường, mỗi từ tiếp theo viết hoa chữ cái đầu, không có ký tự phân cách:
userName. Chuẩn cho biến và hàm trong JavaScript, Java, C#. - PascalCase — tương tự, nhưng từ đầu tiên cũng viết hoa:
UserName. Được dùng cho class và component ở hầu hết mọi nơi. - snake_case — các từ nối bằng dấu gạch dưới, tất cả viết thường:
user_name. Chuẩn trong Python và tên cột cơ sở dữ liệu. - kebab-case — các từ nối bằng dấu gạch ngang:
user-name. Chuẩn cho URL, class CSS và thuộc tính HTML, vì dấu gạch dưới ít phổ biến hơn trong URL.
Vì sao đây không chỉ là thẩm mỹ
Trong thực tế, định danh (identifier) tiếng Việt trong code hầu như luôn bỏ dấu thanh trước khi áp dụng camelCase hay snake_case — tênNgườiDùng gần như không xuất hiện, thay vào đó là tenNguoiDung. Việc bỏ dấu này không phải giới hạn kỹ thuật của ngôn ngữ lập trình, mà là quy ước phổ biến để tránh phụ thuộc vào bảng mã và tránh nhầm lẫn khi so sánh chuỗi không phân biệt dấu.
Vì sao cần chuyển đổi
- Ánh xạ một trường từ API JSON (thường camelCase) sang tên cột cơ sở dữ liệu (thường snake_case).
- Đổi tên biến khi chuyển mã từ ngôn ngữ này sang ngôn ngữ khác có quy ước khác.
- Tạo slug tương thích URL hoặc class CSS từ văn bản của một tiêu đề, kể cả tiêu đề tiếng Việt có dấu.
Sự mơ hồ với các từ viết tắt
Một định danh như userID hay XMLParser đặt công cụ chuyển đổi trước một lựa chọn: coi từ viết tắt là một "từ" duy nhất hay tách thành từng chữ cái riêng lẻ. Các công cụ khác nhau xử lý điều này khác nhau — công cụ này nhận diện một chuỗi chữ hoa liên tiếp như một đoạn từ riêng (XMLParser → XML + Parser), nhưng vẫn nên kiểm tra kết quả thủ công nếu tên định danh sẽ được đưa thẳng vào mã sản xuất.