Skip to content

Optional chaining ?. - #146

Merged
tarasyyyk merged 3 commits into
javascript-tutorial:masterfrom
didostap:optional-chining
Jul 25, 2021
Merged

Optional chaining ?.#146
tarasyyyk merged 3 commits into
javascript-tutorial:masterfrom
didostap:optional-chining

Conversation

@didostap

Copy link
Copy Markdown
Contributor

No description provided.

@CLAassistant

CLAassistant commented Jul 21, 2021

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@dolgachiodolgachio left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Дякую за чудовий переклад!

Будь-ласка, подивіться мої коментарі і пропозиції.
Деякі з них обов'язково потрібно виправити (друкарські помилки), інші після того, як пулл реквест подивиться
@tarasyyyk ;)

[recent browser="new"]

The optional chaining `?.` is a safe way to access nested object properties, even if an intermediate property doesn't exist.
Опціональний ланцюжок `?.` - це безпечний спосіб доступу до влатсивостей об'єктів з вкладеностями, навіть якщо проміжних властивостей не існує.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
Опціональний ланцюжок `?.` - це безпечний спосіб доступу до влатсивостей об'єктів з вкладеностями, навіть якщо проміжних властивостей не існує.
Опціональний ланцюжок `?.` -- це безпечний спосіб доступу до вкладених властивостей об'єктів, навіть якщо проміжних властивостей не існує.

В більшості наших користувачів є адреса `user.address` з вулицею `user.address.street`, проте дехто вирішив взагалі не вказувати адресу.

In such case, when we attempt to get `user.address.street`, and the user happens to be without an address, we get an error:
Отож якщо користувач не вказав адресу, а ми в свою чергу намагаємось отримати доступ до властивості `user.address.street` отримаємо помилку.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
Отож якщо користувач не вказав адресу, а ми в свою чергу намагаємось отримати доступ до властивості `user.address.street` отримаємо помилку.
Отож якщо користувач не вказав адресу, а ми в свою чергу спробуємо отримати доступ до властивості `user.address.street`, то отримаємо помилку.

Це очікуваний розвиток подій, так працює JavaScript. Оскільки `user.address` є `undefined`, то і спроба отримати `user.address.street` закінчується помилкою.

In many practical cases we'd prefer to get `undefined` instead of an error here (meaning "no street").
Проте в багатьох життєвих ситуаціях було б набагато зручніше отримати просто `undefined` ("немає вулиці").

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
Проте в багатьох життєвих ситуаціях було б набагато зручніше отримати просто `undefined` ("немає вулиці").
Проте в багатьох життєвих ситуаціях було б набагато зручніше отримати просто `undefined`, що буде означати "немає вулиці".

Проте в багатьох життєвих ситуаціях було б набагато зручніше отримати просто `undefined` ("немає вулиці").

...And another example. In the web development, we can get an object that corresponds to a web page element using a special method call, such as `document.querySelector('.elem')`, and it returns `null` when there's no such element.
Ще один приклад. У веб розробці ми можемо отримати об'єкт котрий відповідає елементу на веб сторінці за допомогою стеціальних методів, наприклад: `document.querySelector('.elem')`. Проте якщо ми намагатимось отримати елемент якого немає на сторінці, то нам вернеться `null`.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
Ще один приклад. У веб розробці ми можемо отримати об'єкт котрий відповідає елементу на веб сторінці за допомогою стеціальних методів, наприклад: `document.querySelector('.elem')`. Проте якщо ми намагатимось отримати елемент якого немає на сторінці, то нам вернеться `null`.
Ще один приклад. У веб розробці ми можемо отримати об'єкт котрий відповідає елементу на веб сторінці за допомогою спеціальних методів, наприклад: `document.querySelector('.elem')`. Проте якщо ми намагатимось отримати елемент якого немає на сторінці, то нам вернеться `null`.

// document.querySelector('.elem') is null if there's no element
let html = document.querySelector('.elem').innerHTML; // error if it's null
// document.querySelector('.elem') рівний null якщо такого елемента не існує
let html = document.querySelector('.elem').innerHTML; // помилка осткільки null

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
let html = document.querySelector('.elem').innerHTML; // помилка осткільки null
let html = document.querySelector('.elem').innerHTML; // помилка оскільки null

};

let user2 = null;
let user2 = null; // уявимо що користувач не авторизувався

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
let user2 = null; // уявимо що користувач не авторизувався
let user2 = null; // уявімо, що користувач не авторизувався


```js run
delete user?.name; // delete user.name if user exists
delete user?.name; // видалити user.name якщо користувач існує

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
delete user?.name; // видалити user.name якщо користувач існує
delete user?.name; // видалити user.name, якщо користувач існує

````warn header="We can use `?.` for safe reading and deleting, but not writing"
The optional chaining `?.` has no use at the left side of an assignment.
````warn header="Ми можемо використовувати `?.` для безпечного читання і видалення властивостей, але не для запису"
Опціональний ланцюжок `?.` не має сенсу лівій частині просвоювання.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
Опціональний ланцюжок `?.` не має сенсу лівій частині просвоювання.
Опціональний ланцюжок `?.` не має сенсу у лівій частині просвоювання.

Comment thread1-js/04-object-basics/07-optional-chaining/article.md
Ланцюжок `?.` дозволяє без виникнення помилок звертатись до вкладених властивостей.

Still, we should apply `?.` carefully, only where it's acceptable that the left part doesn't exist. So that it won't hide programming errors from us, if they occur.
Тим не менш, потрібно розумно застосовувати `?.`, тільки в тих випах де допустимо що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування. No newline at end of file

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
Тим не менш, потрібно розумно застосовувати `?.`, тільки в тих випах де допустимо що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування.
Тим не менш, потрібно розумно застосовувати `?.`, тільки в тих випадках де допустимо що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування.

@didostap

Copy link
Copy Markdown
ContributorAuthor

@stas-dolgachov дякую за коментарі, все поправив
Прогнав додатково текст через сервіс, він дозволив виявити ще більше орфографічних, граматичних і лексичних помилок. В подальшому всім рекомендую використовувати.

@tarasyyyk
tarasyyyk merged commit c226523 into javascript-tutorial:masterJul 25, 2021
@tarasyyyk

Copy link
Copy Markdown
Collaborator

@all-contributors add @didostap for translation

@allcontributors

Copy link
Copy Markdown
Contributor

@tarasyyyk

I've put up a pull request to add @didostap! 🎉

@tarasyyyk

Copy link
Copy Markdown
Collaborator

@all-contributors add @stas-dolgachov for review

@allcontributors

Copy link
Copy Markdown
Contributor

@tarasyyyk

I've put up a pull request to add @stas-dolgachov! 🎉

Sign up for freeto 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.

5 participants

@didostap@CLAassistant@tarasyyyk@dolgachio@javascript-translate-bot