-
Notifications
You must be signed in to change notification settings - Fork 42
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
Conversation
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`. |
There was a problem hiding this comment.
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
null
vàundefined
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?
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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.
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. | ||
|
There was a problem hiding this comment.
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: |
There was a problem hiding this comment.
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`. |
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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.
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 `=` và `?`, nhưng sau phần lớn các toán tử khác, ví dụ như `+`, `*`. |
There was a problem hiding this comment.
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: |
There was a problem hiding this comment.
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): |
There was a problem hiding this comment.
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): |
There was a problem hiding this comment.
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):
@tunggnu Có nên đóng PR này không, outdated quá rồi, chắc bạn dịch không update đâu |
@henryonsoftware Đóng PR này lại là hợp lý. |
No description provided.