Code sạch code đẹp phần 1: Cái tên nói lên tính cách
Bài viết mở đầu series về clean code, tập trung vào nghệ thuật đặt tên biến, hàm và tham số trong lập trình. Tác giả phân tích các lỗi thường gặp như đặt tên bí ẩn, sử dụng tiền tố kiểu dữ liệu lỗi thời, đặt tên dài dòng hoặc không rõ nghĩa, và đặt tên đa ngôn ngữ. Bài viết cũng hướng dẫn cách sử dụng tính năng Refactor trong Visual Studio để đổi tên một cách hiệu quả, giúp code trở nên dễ đọc và dễ bảo trì hơn.


Chào mọi người,
Hôm nay mình xin bắt đầu viết series bài mới về clean code. Mục đích của loạt bài này giúp chúng ta viết code dễ hiểu, dễ đọc và test hơn. Đặc biệt viết code không chỉ để máy hiểu mà còn phải để người khác hiểu. Mình tin chắc rằng không ít lần bạn đã đọc được những dòng code của các 'tiền bối' và trầm trồ ngưỡng ngộ phải không nào vì đọc code họ viết rất dễ hiểu.
> Khoan đã, có gì đó sai sai? Chú là ai mà bày đặt viết code sạch clean code hả, đi làm được bao nhiêu năm rồi?
>
> Mình chưa đi làm, mới đang học năm 2 à.
>
> À vậy chú viết code nhiều lắm hả, chắc thi ACM hay có project nào nổi bật chưa?
>
> Mình không thi ACM, cũng chưa có project nào nổi bật hết, viết code cũng không nhiều lắm
>
> Thế mà bày đặt viết về clean code, biết gì mà viết, không đọc đâu.
Vâng, trên đây là những suy nghĩ thiếu tích cực. Đâu phải đợi thành chuyên gia mới dám viết phải không nào. Bạn có bao giờ thấy khủng long bạo chúa không sao biết nó là loại khủng long hung dữ nhất? Như mình đã có nói trong bài viết [Review sách 8 to be Great](https://niviki.com/cuoc-song/review-sach-8-traits-successful-people-have-in-common-8-to-be-great/) cũng như [có nên dạy lại những gì mới học](https://niviki.com/nghe-nghiep/co-nen-day-lai-nhung-dieu-ban-moi-duoc-hoc/), có 2 kiểu chuyên gia. Một là chuyên gia thực sự, họ tích lũy kinh nghiệm bằng chính thời gian họ **trải nghiệm** và làm việc trong lĩnh vực của họ. Hai là chuyên gia dựa vào nghiên cứu (research professor), họ đọc nhiều sách, học hỏi từ người khác, có thể họ không đạt thành công như loại chuyên gia thứ nhất, ví dụ điển hình là các chuyên gia tài chính, kinh tế chưa chắc họ là những người giàu nhất, sao họ dám phân tích kinh tế này nọ?
Lan man vậy chủ yếu mình muốn nhấn mạnh rằng mình tuy chưa có nhiều kinh nghiệm làm việc, nhưng khả năng research của mình là có. Mình muốn viết một serie chất lượng cho mọi người về clean code. Nếu có gì chưa đúng, hãy comment giúp mình mở rộng thêm kiến thức nhé.
Thôi chúng ta bắt đầu với bài đầu tiên nhé:
## Bài 1: Cái tên nói lên tính cách

Các cách đặt tên biến, tên hàm, tên tham số đầu vào không thích hợp:

### **Đặt tên bí ẩn, chỉ mình bạn biết mà thôi:**
VD:
sql datareader dr1; void Button2_click(); class page1;
Ai biết dr1, button2_click() hay page1 là gì? Nếu bạn code thế thì sau vài ngày chính bạn cũng không biết ý nghĩa của mấy cái tên này chứ đừng nói người khác. Bạn phải kéo tìm trong chương trình của bạn các hàm, biến liên quan để biết dr1, button2_click() hay page1 có ý nghĩa gì Cách sửa:
sql datareader dataReader; void BtnSearch_Click(); class ViewCommentPage;
dr1 không thì quá tối nghĩa, button2_click() không thì không biết button nào, dùng BtnSearch để biết nó là button Search, _click() để biết hành động click. Nhìn cái biết liền hàm đó để làm gì. Nếu để page1 không thì bó tay nhưng ViewCommentPage thì biết ngay class này thiết kế để xem comment.
### 2\. Đặt tên với tiền tố để phân biệt kiểu dữ liệu:
VD:
int iMaxRequests; float fMaxVAT; iMaxRequests = 25; fMaxVAT = 10000f;
Kiểu này là thời thập niên 80-90 rồi, lúc mình học mấy thầy cũng bắt đặt tên biến giống như vậy, mục đích duy nhất là để phân biệt kiểu dữ liệu thôi. Nhưng mà nhiều IDE ví dụ như Visual Studio nó đã hỗ trợ ta quá nhiều rồi, để con chuột vô là biết biến này kiểu int, string, float,vv rồi. Hỏi decimal với double trong C# để chữ d trước biết là cái nào? Hồi xưa chưa có nhiều IDE như bây giờ, giờ hiện đại rồi, không nên xài phong cách cổ xưa nữa. Để chuột vô biến trong IDE là biết biến kiểu gì rồi
### 3\. Đặt tên dài dòng, dư thừa:

VD:
Để bớt dài dòng, ta có thể sửa lại như sau mà vẫn giữ nguyên được ý nghĩa của tên biến:

### 4\. Tên tham số đầu vào không rõ ràng:
public void Method1(Buttons a, bool b) { if (!buttonState.ContainsKey(a)) buttonState.Add(a, new ButtonsState()); var state = buttonState[a]; if (state.b && b) { state.holdTime += Time.deltaTime; } else if (!state.b && !b) { state.holdTime = 0; } state.b = b; }
Ví dụ trên, hàm method1 không ai biết là hàm gì, hai tham số đầu vào là a, b là 'chịu' luôn. Với những hàm đơn giản như swap (hoán đổi) thì có thể đặt a, b vậy còn chấp nhận được. Ta sửa lại như sau: Nhìn vô cái biết hàm này để cài đặt giá trị cho Button, tham số truyền vào là một button và một giá trị boolean

### 5\. Đa ngôn ngữ
Vừa đặt theo kiểu tiếng Việt, vừa đặt theo tiếng Anh:
```int maxHocSinh;```
Đặt theo kiểu này thấy nó nghiệp dư quá. Mình nghĩ nên đặt theo tiếng Anh hết cho dễ chứ tiếng Việt mình nhiều ý nghĩa lắm, mắc công lại hiểu lầm tầm bậy nữa
```int SoLon;```
SoLon có thể là số lớn, số lon,vv Hồi mình có [học thêm ở trung tâm bên ngoài,](https://niviki.com/nghe-nghiep/co-nen-hoc-them-lap-trinh-o-trung-tam/) học viên mà đặt mấy cái tên biến mà không rõ nghĩa là thầy yêu cầu commet tiếng Việt kế bên. Chi vậy, sao không tập đặt theo tiếng Anh luôn, giờ có từ điển online đầy ra, không thể nói là từ này tiếng Anh là gì không biết nên phải đặt tiếng Việt.
## Refactor trong C#với Visual Studio:
Refactor giúp cho chúng ta đổi tên trong Visual Studio một cách nhanh chóng và tiện lợi với các tính năng như Preview reference changes, search in comments, search in string, vv. Để sử dụng bạn chỉ cần nháy chuột phải vào tên cần đổi chọn Refactor -> Rename là xong:


Lời kết: Nên đặt tên không quá ngắn, không quá dài. Đặt tên sao mà người khác có thể hiểu được nó dùng để làm gì. Đừng quên comment góp ý về bài viết này nhé. Bạn nghĩ gì về cách đặt tên? Bạn có đồng ý với mình không? Cho mình biết bằng cách comment ý kiến của bạn nhé!
Hẹn gặp lại các bạn ở bài viết sau.
Related Posts
Discover more content you might enjoy

English Course Challenge in 2 weeks - Day 12: Kinh nghiệm quay khoá học
Bài viết chia sẻ kinh nghiệm quay khóa học tiếng Anh về Bubble.io, bao gồm việc lựa chọn phần mềm Screen.Studio để quay màn hình và tự động tạo phụ đề, những bài học từ việc đặt mục tiêu và xác định đối tượng học viên trước khi chọn nội dung, cũng như lợi ích của việc thử thách bản thân để vượt qua nỗi sợ và hoàn thành dự định. Tác giả cũng giới thiệu khóa học 'Build your first web app in Bubble for beginners' dành cho người mới bắt đầu.

English Course Challenge in 2 weeks - Day 7: Fine-tuning ChatGPT là gì?
Bài viết chia sẻ tiến trình ngày thứ 7 trong thử thách tạo khóa học tiếng Anh trong 2 tuần. Tác giả giới thiệu về Fine-tuning ChatGPT, một tính năng cho phép tạo phiên bản ChatGPT tùy chỉnh dựa trên dữ liệu cung cấp, đặc biệt hữu ích cho chatbot hỗ trợ khách hàng. Bài viết cũng thảo luận về việc điều chỉnh hướng phát triển ứng dụng demo và khóa học, cùng với những khó khăn khi sử dụng API của OpenAI tại Việt Nam.

English Course Challenge in 2 weeks - Day 2: Tiềm năng của Prompt Engineering
Bài viết chia sẻ về việc phát triển ứng dụng SaaS AI demo cho khóa học Bubble, tập trung vào Prompt Engineering - kỹ thuật viết prompt hiệu quả cho AI. Tác giả giới thiệu cấu trúc prompt chuẩn gồm 6 phần: Persona, Context, Task, Format, Examplar và Tone, đồng thời trình bày ý tưởng và mockup cho ứng dụng hỗ trợ người dùng viết prompt tốt hơn, giải quyết vấn đề nhiều người gặp phải khi sử dụng AI.

Đối thoại với AI: Generative AI (AI tạo sinh) và những điều cần biết
Bài viết dạng hỏi đáp toàn diện về AI tạo sinh, bao gồm kỹ thuật viết prompt hiệu quả, cách kiếm tiền từ AI, các nền tảng thay thế Claude AI, chi phí huấn luyện mô hình lớn, và các khái niệm quan trọng như BERT, mô hình tiền huấn luyện cùng những vấn đề đạo đức liên quan.

Day 21 - Profitable MVP in 30 Days - Thử nghiệm early adopter
Bài viết ngày 21 của thử thách xây dựng MVP có lợi nhuận, tác giả giải thích khái niệm early adopter và chia sẻ cách thử nghiệm mô hình này cho ứng dụng ReadingPointer. Bài viết mô tả việc tạo trang giới thiệu phiên bản premium với quyền lợi đặc biệt cho người dùng sớm, cách triển khai nút 'Go Pro' trên trang chủ và ứng dụng, nhằm kiểm tra mức độ sẵn sàng chi trả của người dùng.
