Code sạch code đẹp phần 1: Cái tên nói lên tính cách
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 cũng như có nên dạy lại những gì mới học, 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, 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.