Вопрос или проблема
Я просматривал Medium, чтобы получить обновления о программировании. Пара статей запутала меня по поводу “Оператора безопасного присваивания”:
async function getData() {
const [networkError, res] ?= await fetch('https://api.backend.com/resource/1')
if(networkError) console.error(networkError)
const [parseError, data] ?= await res.json()
if(parseError) console.error(parseError)
return data
}
Я попытался найти официальную документацию на MDN, но ничего не нашел. Я также попробовал в консоли, но безрезультатно.
Это миф или сайт MDN не обновляется?
Вот статья, которая создала путаницу. Статья на Medium
Существует предложение для оператора безопасного присваивания (?=
). Цель – упростить обработку ошибок без необходимости использовать try/catch, но используя:
const [error, result] ?= doWork();
в отличие от:
try {
const result = doWork();
} catch (error) {
}
Однако это все еще очень раннее предложение, которое даже не появляется в треках предложений для ECMAScript. Это обычно шестиступенчатый процесс, при котором нулевая стадия просто отмечена как там, но еще не рассматривается. Предложение еще не достигло нулевой стадии.
Более того, ранняя стадия предложения очевидна по его README, которое в данный момент гласит на верху:
Предупреждение
Это предложение изменится на
try-expressions
, так как это более идиоматический подход к этой проблеме. Читайте больше по #4 и #5.Нужна помощь в его переписывании 🙂
Таким образом, оно может измениться еще больше, прежде чем даже войдет в трек предложений TC39.
Ответ или решение
Безопасный оператор присваивания в JavaScript: миф или реальность?
На сегодняшний день концепция безопасного оператора присваивания (?=
) в JavaScript считается скорее мифом, чем реальностью, и существует на ранних этапах разработки как предложение, а не как включенная функция в язык. Давайте подробнее рассмотрим, что такое безопасный оператор присваивания и почему он не является полноценной частью JavaScript на данный момент.
Что такое безопасный оператор присваивания?
Безопасный оператор присваивания предполагает использование синтаксиса, который упрощает обработку ошибок при выполнении асинхронных операций. Например, вы могли бы увидеть такой код:
const [error, result] ?= doWork();
Вместо традиционного подхода с использованием try/catch
:
try {
const result = doWork();
} catch (error) {
// обрабатываем ошибку
}
Это предложение направлено на то, чтобы сделать код более лаконичным и повысить его читаемость, избегая многократного написания блоков для обработки ошибок.
Текущий статус предложения
На данный момент предложение о безопасном операторе присваивания находится на очень ранней стадии разработки. Оно не достигло даже нулевой стадии в процессе, который регулируется комитетом TC39, ответственным за становление стандартов ECMAScript. Как отмечено в официальной репозитории предложения на GitHub, такой оператор пока что находится на этапе обсуждений и не включён в планируемые обновления спецификации языка.
Согласно текущим сведениям в репозитории, разработчики предлагают заменить ?=
на концепцию try-expressions
, которая является более формализованным подходом к решению проблемы обработки ошибок. Это делает вопрос о безопасном операторе присваивания еще более затуманенным — его причины решения проблем еще не одобрены в качестве официальной функции языка.
Заключение
Таким образом, можно с уверенностью сказать, что на сегодняшний день безопасный оператор присваивания в JavaScript — это миф, а не реальность. Он существует только как предложение и находится на этапе обсуждения без официальной поддержки и включения в язык. За обновлениями состояния предложения можно следить через репозиторий на GitHub или официальные источники документации, такие как MDN, однако в данный момент они не содержат упоминания о данном операторе.
В свете этой информации, важно рассчитывать на существующие возможности JavaScript для обработки ошибок, такие как конструкции try/catch
, пока мост между предложением и официальным включением не будет построен.