diff --git a/1-js/04-object-basics/07-optional-chaining/article.md b/1-js/04-object-basics/07-optional-chaining/article.md index 4f6b72cb2..646f30b07 100644 --- a/1-js/04-object-basics/07-optional-chaining/article.md +++ b/1-js/04-object-basics/07-optional-chaining/article.md @@ -76,7 +76,7 @@ alert( user.address && user.address.street && user.address.street.name ); // und Логічне "І" з ланцюжком властивостей гарантує нам, що всі вони існують (якщо ж ні -- обчислення припиняється), але й це все ще не ідеал. -Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address` появляється тричі. +Як ви бачите, імена властивостей досі дублюються в коді. В прикладі вище властивість `user.address` з'являється тричі. Ось чому опціональний ланцюжок `?.` був доданий в мову. Щоб розв'язати цю проблему раз і назавжди! @@ -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`. @@ -180,7 +180,7 @@ userGuest.admin?.(); // нічого (немає такого методу) */!* ``` -В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає що ми можемо звернутись до будь-якої його властивості. +В обох випадках спочатку використовуємо крапку (`userAdmin.admin`) для доступу до властивості `admin`, оскільки об’єкт користувача точно існує, а це означає, що ми можемо звернутись до будь-якої його властивості. Вже потім `?.()` перевіряє ліву частину: якщо функція `admin` існує, то вона виконається (у випадку з `userAdmin`). Інакше (для `userGuest`) обчислення припиниться без помилок. @@ -213,7 +213,7 @@ delete user?.name; // видалити user.name, якщо користувач let user = null; user?.name = "Іван"; // Помилка, не спрацює -// це по суті те ж саме що undefined = "John" +// це по суті те ж саме, що й undefined = "John" ``` Воно недостатньо «розумне» для цього. @@ -231,4 +231,4 @@ user?.name = "Іван"; // Помилка, не спрацює Ланцюжок `?.` дозволяє без виникнення помилок звертатись до вкладених властивостей. -Однак, потрібно розумно застосовувати `?.`, тільки в тих випадках де допустимо що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування. +Однак, потрібно розумно застосовувати `?.`, тільки в тих випадках де допустимо, що ліва частина не існує. Щоб таким чином не приховувати потенційні помилки програмування.