Оператор ?= в JavaScript: Повний посібник

pic

У розробці на JavaScript, особливо при роботі з асинхронними задачами та обробкою помилок, ми часто використовуємо блоки try-catch та async-await. Хоча це ефективно, інколи код стає громіздким і важким для читання.

Щоб вирішити цю проблему, JavaScript має оператор ?=, відомий як Оператор безпечного присвоєння. Він спрощує обробку помилок, роблячи ваш код більш стислим і зручним для читання, особливо коли мова йде про функції, які можуть не виконатися або викидати помилки.

У цій статті ми розглянемо, як він працює і чому це може бути важливим для розробників.

Чому варто використовувати оператор ?=

  • Спрощує обробку помилок: усуває необхідність у блоках try-catch.
  • Чистіший код: покращує читабельність і підтримуваність.
  • Уніфіковане поводження: забезпечує однакову обробку помилок по всьому кодовому базі.

Проста обробка помилок

Однією з ключових переваг оператора ?= є його здатність спрощувати управління помилками. Замість того, щоб обгортати кожну потенційно небезпечну операцію в блок try-catch, ми можемо використати цей оператор безпечного присвоєння.

Він повертає результати у форматі [error, result]:
Якщо помилка не сталася, повертається [null, result]. Якщо сталася помилка, повертається [error, null].

Приклад:

const [error, data] ?= await fetchData();  

if (error) {  
 console.log("Сталася помилка:", error);  
} else {  
 console.log("Дані:", data);  
}

Чудово працює з асинхронними функціями та обіцянками (Promises)

Оператор безпечного присвоєння легко інтегрується з обіцянками (Promises) та асинхронними функціями, що робить його ідеальним для обробки помилок в асинхронних завданнях. Це особливо корисно для API запитів, операцій з файлами або будь-яких процесів, де можуть виникнути помилки.

Приклад:

async function getData() {  
 const [fetchError, response] ?= await fetch("https://api.example.com/data");  
 if (fetchError) {  
 handleFetchError(fetchError);  
 return;  
 }  

 const [jsonError, data] ?= await response.json();  
 if (jsonError) {  
 handleJsonError(jsonError);  
 return;  
 }  

 return data;  
}

Чистіший і зрозуміліший код

Оператор ?= допомагає зменшити вкладеність коду та усуває надмірні блоки try-catch. Він також робить обробку помилок більш явною та інтуїтивною, покращуючи підтримуваність і зменшуючи ймовірність пропустити критичні помилки.

Приклад:

// Традиційний підхід  
try {  
 const response = await fetch("https://api.example.com/data");  
 const json = await response.json();  
 const data = parseData(json);  
} catch (error) {  
 handleError(error);  
}  

// Використовуючи ?=  
const [fetchError, response] ?= await fetch("https://api.example.com/data");  

if (fetchError) {  
 handleFetchError(fetchError);  
 return;  
}

Уніфікований підхід

Оператор ?= працює з будь-яким об'єктом, який реалізує метод Symbol.result.

Це дозволяє використовувати однаковий підхід до обробки помилок і результатів, незалежно від типу даних або API.
Це додає гнучкості при роботі зі складними структурами даних або взаємодії з різними сервісами.

Приклад:

const obj = {  
 [Symbol.result]() {  
 return [new Error("Сталася помилка"), null];  
 },  
};  

const [error, result] ?= obj;  
if (error) {  
 console.log("Помилка:", error);  
}

Що таке Symbol.result?

Symbol.result — це метод, який можна визначити в об'єктах або функціях, щоб контролювати, як вони повертають результати при використанні з оператором безпечного присвоєння (?=).

Коли об'єкт або функція викликаються за допомогою ?=, Symbol.result обробляє значення, що повертається, в кортеж [error, result]:

  • Якщо операція успішна, повертається [null, result].
  • Якщо сталася помилка, повертається [error, null].

Ось приклад об'єкта, який реалізує Symbol.result для обробки своїх помилок:

const obj = {  
 [Symbol.result]() {  
 return [new Error("Помилка в об'єкті"), null];  
 }  
};  

const [error, result] ?= obj;  
console.log(error); // Виведе: Помилка в об'єкті

Ця функція дозволяє розробникам налаштовувати поведінку об'єктів та функцій при використанні оператора ?=.

Вона особливо корисна для бібліотек або фреймворків, де потрібен єдиний підхід до обробки помилок. Наприклад, об'єкт відповіді API може реалізувати Symbol.result, щоб повертати помилки або успішні дані в стандартизованому форматі.

Висновок

Оператор безпечного присвоєння ?= є потужним інструментом для розробників на JavaScript, особливо для тих, хто хоче писати чистий, надійний і підтримуваний код. Спрощуючи обробку помилок, він допомагає запобігти непередбаченим збоям і робить ваш код більш надійним. Якщо ви працюєте з обіцянками (Promises), асинхронними функціями або чимось, що може викликати помилки, спробуйте оператор ?=!

Ми обов'язково використовуватимемо цей оператор більше в наших проєктах! 🚀

Дякую за читання!😊

Джерело:

Сподіваюся, ви багато чому навчилися. Знайти мене можна на Linkedin або Github.

Перекладено з: ?= Operator in JavaScript: A Complete Guide

Leave a Reply

Your email address will not be published. Required fields are marked *