@roaddd

Написание кода коротко плохо?

resizeObserver?.disconnect()
vs
if(resizeObserver !== null) {
 resizeObserver.disconnect()
}


Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” — Martin Fowler

Какой вариант кода лучше использовать? А как вы пишите код?
  • Вопрос задан
  • 271 просмотр
Пригласить эксперта
Ответы на вопрос 5
mayton2019
@mayton2019
Bigdata Engineer
Оба варианта хорошие. Но обычно если ты работаешь отладчиком и тебе
интересно где логика ведет себя не так - то второй вариант удобнее.

Однострочники хороши только когда ты досконально понимаешь
что внутри них происходит.
Ответ написан
NikFaraday
@NikFaraday
Student full-stack Developer
Ну как сказать, если я правильно понимаю, символ ? просто допускает, что данный тип может принимать значение null (Да, проверил, вот ссылка).

Во втором примере вы явно проверяете на значение отличное от null, И ТОЛЬКО ТОГДА вызываете метод disconnect()

Разница двух примеров в том, что в первом случае вы всегда будете вызывать метод disconnect(), а во втором, если объект resizeObserver не будет равен null

UPD: да, на счёт кода. При написании кода (Помимо архитектуры, официальных конвенций по написанию кода и т.д.) опирайтесь на два фактора:
  • Ваш код может легко понять кто-то другой
  • Через две недели вы сможете посмотреть на этот код и понять что он делает и зачем, так будто вы его написали 2 часа назад (грубо говоря)
  • Ваш код может легко изменить кто-то другой
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
все течет все меняется, никаких хаков тут нет, 1 вариант кода легитимен.
Ответ написан
Комментировать
@formasters777
в данном случае Вы представили два варианта условных ветвлений,
в первом случае описывается Optional chaining operator.
во втором случае обычное представление if else как есть,
ну а дальше если углубится, то имеет значение как Вы формируете компоненты, функции, на сколько они стабильны при выполнении под нагрузкой, например 1000 запросов,
ведь если взять Вашу строку кода resizeObserver?.disconnect(),
обычно классикой программирования считается когда Вы указываете программе если ДА, то одно действие,
если НЕТ, то другое действие, если даже функция по каким-либо причинам не срабатывает она должна что-то возвращать (например false, null). Эта практика используется для стабильности кода, чтобы программа не додумывала сама.
к примеру, если к Вашей строке кода resizeObserver?.disconnect() добавить тернарный оператор, например
resizeObserver?.disconnect() ? 'observer_some_action()' : 'observer_another_action()' || null;
В этом случае можно получить дополнительную функциональность кода, например для тестов, чтобы не ловить конкретное событие в общем стеке.
Или resizeObserver?.disconnect?.() ?.() эта запись проверит существует ли вообще функция disconnect().
Ошибки можно и не ловить конечно, но без их отработки Вы не достигните более стабильной работы программы,
также стоит отметить, что типы данных(typescript), увеличивают стабильность кода, а добавление в некоторых случаях например, else {null} может уменьшить блокирование Вашей программы, то есть ошибка или сбой загрузки чего либо будет, но при этом Вы не потеряете доступ к Вашему UI, и сможете что-то клацать ещё.

но если взять примеры с промисов javascript, там есть варианты пропускания отрицательных ответов,
return new Promise((resolve) => {
          setTimeout(function() {
              console.log('2');
              return resolve(2);
          }, 1000); }
}

можно даже ошибки не обрабатывать.
В целом .? позволяет Вам более интересно работать с данными, но не стоит им злоупотреблять. т.к. это может скрыть проблемы в Вашем коде, их применяют для чтения и удаления, но не записи.
Ответ написан
@Neonoviiwolf
Flutter developer
записи однотипны в данном контексте, по мне первый вариант удобней читать, но если таких "?" несколько в одном вызове, то отлаживать сложнее.
Сам пишу в основном с "?", а условия if пишу там, где в этом считаю больше пользы, чем краткость
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы