Khi nào nên viết hoa các hằng số JavaScript của bạn


Nhiều hướng dẫn về phong cách JavaScript đề xuất viết hoa tên hằng. Cá nhân tôi hiếm khi thấy quy ước này được sử dụng ở nơi mà tôi nghĩ nó nên được sử dụng. Điều này là do định nghĩa của tôi về hằng số hơi sai. Tôi quyết định tìm hiểu thêm một chút và trở nên quen thuộc hơn một chút với quy ước này.

Chúng ta định nghĩa thuật ngữ “hằng số” như thế nào?

Trong lập trình, hằng số là thứ không thay đổi.

Đó là một giá trị mà chương trình không thể thay đổi trong quá trình thực thi bình thường.

Vậy JavaScript có cung cấp cho chúng ta cách khai báo một giá trị không thể thay đổi không? Trước khi chúng tôi trả lời điều này, chúng ta hãy nhìn vào nguồn gốc của quy ước này.

Quy ước viết hoa có nguồn gốc từ C

C là một ngôn ngữ được biên dịch. Điều này có nghĩa là một chương trình khác sẽ chuyển đổi tất cả mã của bạn thành mã máy trước khi chạy.

Mặt khác, JavaScript là một ngôn ngữ được giải thích. Trình thông dịch đọc mã của bạn, từng dòng một, khi mã chạy.

Sự khác biệt giữa biên dịch và thông dịch đóng một vai trò trong cách chúng ta khai báo các giá trị không đổi trong C.

Đọc thêm  JavaScript Check Empty String – Kiểm tra Null hoặc Empty trong JS

Trong C, tôi có thể khai báo một biến như thế này:

int hoursInDay = 24;

Hoặc, một hằng số như thế này:

#define hoursInDay 24

Ví dụ thứ hai được gọi là hằng số tượng trưng. Hằng ký hiệu có thể là một dãy ký tự, một hằng số hoặc một chuỗi. Đây cũng được gọi là giá trị nguyên thủy. Các giá trị nguyên thủy trong JavaScript là chuỗi, số, booleans, null, không xác định, ký hiệu (đừng nhầm với hằng ký hiệu) và int lớn.

Bây giờ, hãy xem lại quá trình biên dịch.

Trước khi biên dịch, có một giai đoạn tiền biên dịch. Ở đây, trình biên dịch trước thay thế tất cả các trường hợp của hằng ký hiệu bằng giá trị tương ứng. Trình biên dịch không bao giờ biết rằng lập trình viên đã viết hoursInDay. Nó chỉ nhìn thấy số 24.

Viết hoa giúp lập trình viên thấy những giá trị thực sự không đổi này.

#define HOURS_IN_DAY 24

Hằng số JavaScript khác với hằng số tượng trưng

Trước ES6, chúng tôi đã lưu trữ hầu hết các giá trị trong các biến, ngay cả những giá trị mà bạn muốn không đổi.

Viết hoa giúp chúng tôi thấy các giá trị mà chúng tôi muốn duy trì không đổi.

var HOURS_IN_DAY = 24;
var hoursRemaining = currentHour - HOURS_IN_DAY;
var MY_NAME = 'Brandon';
MY_NAME = ... // oops don't want to do this.

ES6 đã giới thiệu khai báo const đó không phải là một “hằng số” theo nghĩa thuần túy nhất.

ES6 đã thêm các điều khoản constlet như những cách để tạo ra các biến với các mục đích khác nhau.

Đọc thêm  Lặp qua một đối tượng trong JavaScript – Cách lặp qua một đối tượng trong JS

Với hai thuật ngữ đó, bạn có thể nghĩ rằng chúng tôi:

  1. không cần viết hoa bất cứ thứ gì vì chúng ta có thể thấy rõ biến nào được dự định giữ nguyên hoặc
  2. chúng ta nên viết hoa mọi thứ mà chúng ta khai báo với const.

Theo định nghĩa, const tạo một hằng số là tham chiếu chỉ đọc cho một giá trị. Điều này không có nghĩa là giá trị mà nó nắm giữ là bất biến. Nó chỉ nói rằng mã định danh biến không thể được chỉ định lại.

Nói cách khác, một số const tài liệu tham khảo có thể thay đổi.

const firstPerson = {
  favoriteNumber: 10,
};
const secondPerson = firstPerson;
console.log(secondPerson.favoriteNumber); //10
firstPerson.favoriteNumber +=1;
console.log(secondPerson.favoriteNumber); //11

Ví dụ trên cho thấy khai báo const không đảm bảo rằng biến đó là bất biến.

const chỉ ngăn chúng ta cố gán lại tên biến. Nó không ngăn thuộc tính đối tượng thay đổi. Hãy nhớ rằng: các đối tượng là tham chiếu qua.

// "TypeError: Assignment to constant variable."secondPerson = 'something else';
const secondPerson = 'Me'
secondPerson = 'something else';

Vì vậy, đối với JavaScript, chúng ta không chỉ đơn thuần tìm kiếm một const tuyên ngôn. Chúng ta cần đặt hai câu hỏi để xác định xem một biến có phải là hằng số hay không:

  1. Là giá trị của biến nguyên thủy?
  2. Chúng ta có định giữ tên biến chỉ cùng một giá trị trong suốt chương trình của mình không?

Nếu câu trả lời là có cho cả hai, chúng ta nên khai báo biến với const và có thể viết hoa tên.

Đọc thêm  Không thể đọc Thuộc tính 'đẩy' của Không xác định trong JavaScript

Lưu ý rằng tôi đã nói “có thể.” Tinh thần của quy ước này xuất phát từ các ngôn ngữ khác nhau có hằng số thực tế. JavaScript thì không. Ít nhất là theo nghĩa thuần túy nhất. Đây có thể là lý do tại sao bạn thấy quy ước này ít thường xuyên hơn bạn mong đợi. Airbnb có một phần tuyệt vời trong hướng dẫn phong cách của họ ở đây.

Các chìa khóa rút ra là nhận ra việc xác định một hằng số trong JavaScript phải bao gồm ý định của lập trình viên.

Ngoài ra, không phải mọi quy ước từ một ngôn ngữ đều có ý nghĩa trong một ngôn ngữ khác. Cuối cùng, tôi chỉ có thể tưởng tượng rằng nhiều quy ước đã được sử dụng từ rất lâu trước khi các IDE có khả năng như ngày nay. Tôi tin rằng IDE của tôi rất vui khi nói với tôi rằng tôi đã sai. Nó xảy ra rất nhiều.

Cảm ơn vì đã đọc!

woz

theo tôi trên Twitter.

ghi chú

  • Bạn có thể thắc mắc tại sao tôi không sử dụng PI trong bất kỳ ví dụ nào trong số này. Từ viết tắt – đặc biệt là từ viết tắt gồm hai chữ cái – có xu hướng luôn được viết hoa hoặc luôn viết thường theo quy ước.





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status