🧪 SonarQube - Tìm hiểu Rules cho TypeScript - về code thối 💩 - phần 4

🧪 SonarQube - Tìm hiểu Rules cho TypeScript - về code thối 💩 - phần 4

Chi tiết rule tham khảo tại sonarsource rules for typescript - code smell.

Các rule này thuộc loại code thối - code không ngon - code smell.

🤤 Function không nên trả về giá trị bất biến trong mọi trường hợp và với mọi input

Function returns should not be invariant

What the hell! Lại có thể loại function trả về giá trị bất biến, thế thì cũng không cần function để làm gì cả!

À khoan, đây có thế là 1 lỗi ngây ngô, không có chủ đính của developer.

🤔 Ví dụ đoạn code vi phạm

function foo(a) {  // Noncompliant 😨
  let b = 12;
  if (a) {
    return b;
  }
  return b;
}

Ta thấy dù có input là gì thì function này vẫn trả về b. Thế thì nên dẹp tiệm function ngay và luôn, lấy luôn giá trị b cho xong.

b ở đây không nhất thiết là 1 giá trị bất biến (ở ví dụ trên b = 12).

🤤 Viết số trong hệ "bát phân" không nên gây nhầm lẫn với hệ thập phân

Octal values should not be used

Bát phần hay hệ cơ số 8 khác với hệ cơ số 10 mà ta hay dùng, đếm từ 0 đến 7 thì thêm 1 chữ số vào bên trái.

Còn hệ thập phân thì đếm đến 9 mới thêm 1 số vào bên trái.

😨 Vấn đề

Mở console của trình duyệt gõ:

010

Output là 8. What the hell! Do đó, 2 số ở 2 hệ này rất dễ nhầm lẫn.

Có thể developer cố tình gõ như vậy thì không sao, nhưng cũng có thể là "lỗi đánh máy" thì có trời mà biết ý nó là hệ nào. 😨

May là từ chuẩn ES6 trở đi, ta có cách viết mới dành cho hệ cơ số 8. Đó là thêm 0o vào trước số hệ bát phần. 😌

0o là số không với chữ o tròn như quả trứng gà bên cạnh!

Mở console của trình duyệt gõ:

0o1

Output vẫn là 1, vì 1 là 1 trong hệ bát phân (hơi lú).

0o10

Output là 8, vì đếm quá 7 thì thêm 1 số về phía bên trái.

0o8

Output là Uncaught SyntaxError: Invalid or unexpected token, vì trong hệ này không tồn lại cách viết số 8.

🤔 Ví dụ đoạn code vi phạm

let myNumber = 010;   // Noncompliant 😨. myNumber will hold 8, not 10 - was this really expected?

😌 Giải pháp tuân thủ rule

Đối với hệ cơ số 10 đơn giản là:

let myNumber = 10;

Đối với hệ cơ số 8:

let myNumber = 0o10;

Photo by NeONBRAND on Unsplash