Skip to content

Fix few small typos in optional chaining (01-04-07) #697

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions 1-js/04-object-basics/07-optional-chaining/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ alert( user.address && user.address.street && user.address.street.name ); // und

Логічне "І" з ланцюжком властивостей гарантує нам, що всі вони існують (якщо ж ні -- обчислення припиняється), але й це все ще не ідеал.

Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address` появляється тричі.
Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address` з'являється тричі.

Ось чому опціональний ланцюжок `?.` був доданий в мову. Щоб розв'язати цю проблему раз і назавжди!

Expand Down Expand Up @@ -120,7 +120,7 @@ alert( user?.address.street ); // undefined
Наприклад в `user?.address.street.name` конструкція `user?.` дозволяє `user` залишатись `null/undefined` (і повертати `undefined` в такому випадку), але це працює тільки для `user`. Доступ до решти властивостей здійснюється звичайним способом. Якщо ми хочемо, щоб якась з них була необов’язковою, тоді конкретно для цієї властивості нам доведеться замінити `.` на `?.`.

````warn header="Не зловживайте опціональним ланцюжком"
Нам слід використовувати `?.` тільки в тих ситуаціях коли ми припускаємо що значення може не існувати.
Нам слід використовувати `?.` тільки в тих ситуаціях коли ми припускаємо, що значення може не існувати.

Наприклад, якщо за нашою логікою об’єкт `user` точно існує, але його властивість `address` є необов’язковою, тоді нам слід використовувати конструкцію `user.address?.street`. Проте аж ніяк не `user?.address?.street`.

Expand Down Expand Up @@ -180,7 +180,7 @@ userGuest.admin?.(); // нічого (немає такого методу)
*/!*
```

В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає що ми можемо звернутись до будь-якої його властивості.
В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає, що ми можемо звернутись до будь-якої його властивості.

Вже потім `?.()` перевіряє ліву частину: якщо функція `admin` існує, то вона виконається (у випадку з `userAdmin`). Інакше (для `userGuest`) обчислення припиниться без помилок.

Expand Down Expand Up @@ -213,7 +213,7 @@ delete user?.name; // видалити user.name, якщо користувач
let user = null;

user?.name = "Іван"; // Помилка, не спрацює
// це по суті те ж саме що undefined = "John"
// це по суті те ж саме, що й undefined = "John"
```

Воно недостатньо «розумне» для цього.
Expand All @@ -231,4 +231,4 @@ user?.name = "Іван"; // Помилка, не спрацює

Ланцюжок `?.` дозволяє без виникнення помилок звертатись до вкладених властивостей.

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