Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Bạn đọc thấy if (status === 3) hoặc price * 0.08 trong code và tự hỏi: 3 là gì, 0.08 là gì? Những con số hoặc chuỗi xuất hiện không có giải thích gọi là "magic number" (số ma thuật). Chúng khiến code khó đọc và rất dễ sinh lỗi khi cần thay đổi.
function calculateFee(amount, status) {if (status === 3) {return amount * 0.08 + 15000;}return amount * 0.05;}Câu hỏi đặt ra:
const STATUS_PREMIUM = 3;const PREMIUM_FEE_RATE = 0.08;const PREMIUM_FIXED_FEE = 15000; // VNDconst STANDARD_FEE_RATE = 0.05;function calculateFee(amount, status) {if (status === STATUS_PREMIUM) {return amount * PREMIUM_FEE_RATE + PREMIUM_FIXED_FEE;}return amount * STANDARD_FEE_RATE;}Giờ đọc code là hiểu ngay. Muốn đổi mức phí chỉ sửa một chỗ. Tên hằng số trở thành tài liệu và tìm kiếm cũng dễ hơn.
Hầu hết ngôn ngữ dùng UPPER_SNAKE_CASE cho hằng số: MAX_LOGIN_ATTEMPTS, DEFAULT_PAGE_SIZE, SECONDS_PER_DAY. Tên nên nói về ý nghĩa, không nói về giá trị. THREE hay EIGHT_PERCENT chẳng hơn gì con số. Nếu giá trị đổi, tên vẫn nên đúng.
Khi có một tập các trạng thái hoặc loại hữu hạn, enum tốt hơn một chùm hằng số rời:
// TypeScriptenum OrderStatus {Pending = 'pending',Paid = 'paid',Shipped = 'shipped',Cancelled = 'cancelled',}function canCancel(status: OrderStatus): boolean {return status === OrderStatus.Pending || status === OrderStatus.Paid;}# Pythonfrom enum import Enumclass OrderStatus(Enum):PENDING = "pending"PAID = "paid"SHIPPED = "shipped"CANCELLED = "cancelled"Lợi ích: trình soạn thảo gợi ý các giá trị hợp lệ, trình biên dịch bắt lỗi gõ sai, và mọi nơi dùng cùng một nguồn sự thật. Chuỗi như "shiped" (gõ sai) sẽ không còn lặng lẽ sinh bug.
Không phải con số nào cũng là magic number. Những giá trị sau thường chấp nhận được:
0 và 1 trong ngữ cảnh hiển nhiên (khởi tạo bộ đếm, chỉ số đầu mảng).2 khi dùng để kiểm tra chẵn lẻ (n % 2 === 0).PERCENT = 100 cũng không thừa.Ngược lại, hãy đặt tên cho: ngưỡng nghiệp vụ, thời gian chờ, giới hạn kích thước, mã trạng thái, tỷ lệ, URL, đường dẫn, tên khóa cấu hình, chuỗi lặp lại nhiều nơi.
OrderStatus nằm trong module đơn hàng.Nhiều lỗi nghiêm trọng đến từ nhầm đơn vị. Hãy đặt đơn vị vào tên hoặc comment: TIMEOUT_MS = 5000, MAX_UPLOAD_MB = 10, FEE_VND = 15000. Khi cộng, so sánh các giá trị, đảm bảo cùng đơn vị. Với tiền tệ, hãy tránh dùng số thực (float) để tính tiền vì sai số làm tròn, thay vào đó dùng số nguyên theo đơn vị nhỏ nhất hoặc kiểu decimal.
[^a-zA-Z_]\d{2,} giúp lọc nhanh).Đặt tên cho các con số và chuỗi quan trọng là thay đổi rất rẻ nhưng làm code dễ đọc, dễ sửa và ít lỗi hơn hẳn. Lần tới khi định gõ một số lạ vào code, hãy dừng lại và đặt cho nó một cái tên.
Muốn học thêm các thói quen viết code chuyên nghiệp, bạn có thể bắt đầu với những khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment