07-07-2022 • ☕️ ☕️ 5 phút trướcJavascript
Magic number theo nghĩa đen là một con số ma thuật. Là khái niệm mà develop dùng để gọi những con số trong code mà chúng chỉ tồn tại ở đó nhưng không được define một cách rõ ràng rằng chúng biểu diễn cho một giá trị nào đó.
Ví dụ:
function validateMp3(file) { return new Promise((resolve) => { var objectURL = URL.createObjectURL(file); var mySound = new Audio([objectURL]); mySound.addEventListener( "canplaythrough", () => { URL.revokeObjectURL(objectURL); resolve(mySound.duration <= 15); }, false, ); }); }
Nhìn vào đoạn code trên bạn thấy rằng function đang trả về số giây của file mp3 phải nhỏ hơn hoặc bằng 15. Nghĩa là thời lượng tối đa của 1 file mp3 cao nhất là 15s. OK cũng khá dễ hiểu. Cùng xem tiếp 1 vi dụ khác với mình.
for (let i = 1; i < 52; i++) { ... }
Lúc này người đọc code sẽ không rõ tại sao vòng lặp này chỉ chạy đến 52 mà không phải 1 con số nào khác 🙃.
Để giải quyết vấn đề này chúng ta nên đặt 1 hằng số với 1 cái tên có nghĩa:
const TOTAL_BAI_TIEN_LEN = 52; for (let i = 0; i < TOTAL_BAI_TIEN_LEN; i++) { ... }
Nhìn vào code bạn sẽ hiểu ngay rằng vòng lặp này đang lặp qua 52 lá bài trong 1 bộ bài chơi tiến lên. Quay lại ví dụ 1 nếu bạn đặt 1 hằng số
const MAX_DURATION = 15; function validateMp3(file) { return new Promise((resolve) => { var objectURL = URL.createObjectURL(file); var mySound = new Audio([objectURL]); mySound.addEventListener( "canplaythrough", () => { URL.revokeObjectURL(objectURL); resolve(mySound.duration <= MAX_DURATION); }, false, ); }); }
Thì khi bạn đọc code và check lại đoạn code mà bạn đã code vài tháng / năm trước thì nhìn code sẽ dễ hiểu hơn nhiều. Thay vì bạn phải thốt lên rằng còn số 15 này có nghĩa là gì , ở đâu ta có nó 😂
Tóm lại, khi có 1 magic number trong đoạn code xử lý của bạn, bạn nên define 1 hằng số với 1 cái tên dễ hiểu. Để lead của bạn đở phải comment 😂