Code sạch, p1

Development

discuss #1

Sau buổi Discuss đầu tiên với chủ đề Code sạch, đánh giá dựa trên tính hiện tại chúng tôi đưa ra các vấn đề sau:

Đặt tên biến, tên hàm không có ý nghĩa

Tên không có ý nghĩa là những tên không mang ý nghĩa của giá trị gán cho nó hay không khơi gợi thông tin về biến đó.

Đặt tên có ý nghĩa giúp code dễ đọc hơn với người khác hoặc với chính mình sau 1 thời gian đọc lại, ngoài ra cắt giảm được phần comment code, phần mà vốn dĩ các LTV đều lười.

Ví dụ, đặt tên biến cho ngày hết hạn:

Tên có ý nghĩa: expiredAt = datetime.now()

Tên không có ý nghĩa: d = datetime.now()

Việc đặt tên không có ý nghĩa thường xuyên xảy ra, nguyên nhân của vấn đề này thường do:

Để khác phục vấn đề này, chúng ta có vài phương án như sau:

Về cấu trúc, có thể dùng kiểu snake case hoặc camel case, tùy theo ngôn ngữ, convention sử dụng: viDuCamelCase, vi_du_snake_case.

Tham khảo:

Hàm, file quá dài

Nội dung hàm quá dài thường do chưa nhiều logic xử lý, việc này làm code khó đọc, khó maintain, khó debug khi có lỗi xảy ra.

Nên:

Cách nhận biết hàm quá phức tạp, cần phải chia thành hàm con:

Tham khảo:

Dùng linter theo từng ngôn ngữ

lint, or a linter, is a tool that analyzes source code to flag programming errors, bugs, stylistic errors, and suspicious constructs

Linter sinh ra để đảm bảo các lập trình viên tuân theo 1 coding style chung. Các Code Editor hoặc IDE đều có tích hợp sẵn, bạn chỉ việc cài và sử dụng. Tùy thuộc ngôn ngữ, dự án sẽ sử dụng các chuẩn riêng. VD:

Việc sử dụng lint hay gặp phải các vấn đề sau:

Hoặc

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
                     LEFT, DISABLED, NORMAL, RIDGE, END)

Do vậy, trong cùng 1 dự án, team nên thống nhất việc sử dụng linter với nhau.

Magic number

magic number

A magic number is a direct usage of a number in the code.

Như ví dụ trong đoạn code ở ảnh mình họa bên trên, nếu dùng thẳng 85072278 vào code, nó sẽ được viết như sau:

if (pid == "85072278") {
	_reboot()
}

Do đó sẽ rất khó theo dõi 85072278 là cái gì, nó ảnh hưởng đến tính dễ đọc của code. Nếu được viết lại với việc bỏ magic number đi:

#define LINUX_REBOOT_PID "85072278"
if (pid == LINUX_REBOOT_PID) {
	_reboot()
}

Lúc này, trông 85072278 có ý nghĩa hơn rồi.

Tham khảo:

Hàm chỉ định rõ arguments

function argument

Việc chỉ định đõ argument cho hàm mang lại các giá trị:

Dùng gì thì import cái đó

Việc import dư thừa không những gây lãng phí tài nguyên (tốn dung lượng ổ cứng, tốn thời gian download - với file JS,…) mà còn có thể gây ra các lỗi không kiểm soát được của những phần code import mà không dùng.

VD:

Dùng i18n

Việc dùng i18n không những kill được vấn đề về Magic number mà còn:

Share on: Facebook, Twitter