Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nullish coalescing operator '??' #125

Closed
wants to merge 1 commit into from

Conversation

hiimchinh
Copy link

No description provided.

@CLAassistant
Copy link

CLAassistant commented Mar 31, 2021

CLA assistant check
All committers have signed the CLA.

Comment on lines +5 to +7
Toán tử nullish coalescing được viết dưới dạng hai dấu hỏi `??`.

The nullish coalescing operator is written as two question marks `??`.
Do toán tử này coi `null` và `undefined` như nhau, chúng ta sẽ dùng một thuật ngữ đặc biệt ở bài này. Chúng ta sẽ nói rằng một biểu thức được coi là "được định nghĩa" khi nó không phải là `null` hoặc `undefined`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Cần đảo lại thứ tự 2 đoạn này để đúng với bản gốc.
  • Do toán tử này coi nullundefined như nhau, chúng ta sẽ dùng một thuật ngữ đặc biệt ở bài này. => Câu này cung cấp thêm thông tin nhưng nó không có trong bản gốc. Liệu nên giữ nó lại hay bỏ đi?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

em thấy là ở bản gốc tiếng anh có thay đổi khác với bản hiện tại tiếng việt nên em đã dịch theo bản mới luôn ạ.
https://javascript.info/nullish-coalescing-operator

Copy link
Contributor

@tunggnu tunggnu Apr 5, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Trên nguyên tắc, do bạn fork từ repo của bản tiếng Việt nên cần căn cứ theo bản tiếng Việt để dịch, không nên tham khảo chéo sang repo của bản tiếng Anh dù có thể nó có code mới hơn, nếu không nội dung sẽ không nhất quán, gây hiểu nhầm khi review.
  • Bạn nên tạo riêng một branch ứng với bài viết bạn đang dịch, và chỉ xóa nó sau khi đã merge thành công vào repo bản tiếng Việt, như thế bạn có thể dịch song song nhiều bài viết. Không nên làm việc trực tiếp trên branch master như với bài viết này.
  • Trong quá trình dịch hoặc trước khi bạn tạo pull request bạn có thể update repo của bản tiếng Việt rồi merge sang branch đang dịch để xem các thay đổi mới nhất nếu có, rồi cập nhật bản dịch của bạn nếu cần.

Mình đã update code mới nhất từ repo tiếng Anh sang repo tiếng Việt, do đó pull request này của bạn đã bị conflict. Bạn có thể cập nhật bản dịch này và xử lý conflict nếu muốn.


```js
result = (a !== null && a !== undefined) ? a : b;
result = a !== null && a !== undefined ? a : b;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Không sửa phần mã của bản gốc, trừ khi nó là chuỗi kí tự hoặc chú thích.

Comment on lines +24 to 25
Giờ thì chắc bạn đã biết rõ toán tử `??` làm gì. Hãy xem có thể áp dụng toán tử này ở đâu.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Đoạn này không có trong bản gốc.

```

Of course, if `user` had any value except `null/undefined`, then we would see it instead:
Còn dưới đây là ví dụ với `user` được gán với một cái tên:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dịch không giống bản gốc.

```

We can also use a sequence of `??` to select the first value from a list that isn't `null/undefined`.
Chúng ta cũng có thể dùng nhiều toán tử `??` để chọn giá trị đầu tiên trong một danh sách mà không có giá trị là `null/undefined`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sửa câu này lại như sau liệu có hợp lý hơn?

Chúng ta cũng có thể dùng nhiều toán tử ?? để chọn giá trị đầu tiên không phải là null/undefined trong một danh sách.

- Còn biểu thức `height ?? 100` kiểm tra xem `height` có phải là `null/undefined` hay không, và nó không phải,
- thế nên kết quả của biểu thức là `height`, tức là `0`.

Trong thực tiễn, height là 0 thường là một giá trị hợp lệ và không nên thay thế bằng một giá trị mặc định. Vì thế ở đây sử dụng `??` là chính xác.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dịch không giống bản gốc.

Comment on lines +111 to +113
Thứ tự thực hiện cảu toán tử `??` gần ngang với `||`, chỉ thấp hơn một chút. Nó xếp thứ 5 trong [bảng MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), trong khi `||` xếp thứ 6.

The precedence of the `??` operator is rather low: `5` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). So `??` is evaluated before `=` and `?`, but after most other operations, such as `+`, `*`.
Điều đó có nghĩa là, giống như `||`, toán tử nullish coaslescing `??` sẽ được đánh giá trước `=` `?`, nhưng sau phần lớn các toán tử khác, ví dụ như `+`, `*`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hai đoạn này tuy không sai nhưng không giống bản gốc nên cần dịch lại để tôn trọng bản gốc.


So if we'd like to choose a value with `??` in an expression with other operators, consider adding parentheses:
Thế nên nếu chúng ta muốn sử dụng `??` trong một biểu thức với các toán tử khác, thì việc cho thêm ngoặc đơn nên được cân nhắc:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trong tình huống thông thường nên sử dụng câu chủ động thì tốt hơn là câu bị động, ví dụ như:

Thế nên nếu chúng ta muốn sử dụng ?? trong một biểu thức với các toán tử khác, thì nên cân nhắc cho thêm các dấu ngoặc đơn:

let area = height ?? 100 * width ?? 50;

// ...works the same as this (probably not what we want):
// ... hoạt động tương đương như với dòng sau (có lẽ không như chúng ta mong muốn):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hoạt động tương đương như với dòng sau


The code below triggers a syntax error:
Dòng code dưới đây gây ra một syntax error (lỗi cú pháp):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cụm từ "syntax error" trong tình huống này không phải là một thuật ngữ hoặc danh từ riêng được sử dụng nhiều lần trong bài viết, nên nó chỉ có tác dụng ghi chú về mặt dịch thuật. Cho nó vào trong cặp ngoặc đơn có lẽ hợp lý hơn:

Dòng code dưới đây gây ra một lỗi cú pháp (syntax error):

@henryonsoftware
Copy link
Contributor

@tunggnu Có nên đóng PR này không, outdated quá rồi, chắc bạn dịch không update đâu

@tunggnu
Copy link
Contributor

tunggnu commented Feb 23, 2023

@henryonsoftware Đóng PR này lại là hợp lý.

@tunggnu tunggnu closed this Feb 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants