Pull to refresh

Comments 21

Да всем насрать на твой тайпскрипт
У меня сложилось впечатление, что сейчас почти весь новый JS пишется на самом деле на TS. Кроме мелких прототипов, всякой маргинальщины и совсем плохого кода.
А у меня сложилось впечатление, что на тс пишут только свитчеры с шарпов и ангулярщики
Иронично, но не знаю ни одних, ни вторых, но при этом всё-равно имею впечатление, что на ТС пишут большинство сложного кода.

Очень долго доходят до этого. В lodash/underscore давно уже есть flat, flatMap, и optional chaining (safe navigation). Надо было добавить в спецификацию тогда же, когда добавили Array.prototype.map/reduce/filter. Столько лет люди парятся с этим "person && person.address && person.address.street".

Что мешает перенести из lodash хотя бы часть супер полезных функций (например find, findIndex)
Дак они как бы давно есть О_о
Разработчики стандартов явно вдохновились последним C#
Но проблема заключается в том, что и пустая строка в этом случае будет воспринята как ложное значение. Если это учесть — данный код надо переписать так:
const name = (obj.name && obj.name !== '') || 'Jane';

Так в name окажется или true или 'Jane'. Вроде ж имя хотели, причем даже пустая строка — нормальное имя.
const name = (obj.name || obj.name === '') ? obj.name : 'Jane';

Может как то так?
Тоже об этом подумал и даже пошёл проверять, решив, что я упускаю какую-то удобную возможность. Да, там true.
Но ведь это примерно то же самое, что obj.name. Во всяком случае, оно в себя это включает.
Array.prototype.flat и Array.prototype.flatMap ведь уже во всех основных браузерах есть
const name = (obj.name && obj.name !== '') || 'Jane';


Я бы сказал, что описанное неудобство еще выше, поскольку и в предложенном варианте тоже будет ошибка, так как при пустой строке будет возвращаться true вместо имени. =)

Сейчас это даже будет что-то на манер:
const name = (obj.name && obj.name !== '') ? obj.name : 'Jane';


Так что да, ?? был бы очень полезен для простоты и чистоты
Опциональные цепочки были бы очень полезны. Чего ещё мне часто не хватает — опционального добавления свойства в объект при его создании. Сейчас приходится извращаться, создавая объект без этого свойства, добавляя его отдельной строкой. Это размазывает логику, неудобно.
const data = {
  prop1: 'prop1'
}

const condition = true
if (condition) {
  data.prop2 = 'prop2
}

Можно, конечно, сделать вот так:
const condition = true
const data = {
  prop1: 'prop1',
  ...(condition ? {prop2: 'prop2'} : null)
}

Но хотелось бы что-то более наглядное — ключи отдельно, значения отдельно и без ненужного обвеса. Например, как-то так:
const data = {
  prop1: 'prop1',
  prop2: 'prop2' if (condition)
}

Заодно и постфиксные условия ввести — они удобны иногда.

Вот так достаточно компактно?


const data = {
  prop1: 'prop1',
  ...condition && { prop2: 'prop2' },
}
Такой вариант тоже использовал, забыл уже. Нет, не вполне достаточно. Логически однотипные фрагменты хочется видеть расположенными на одном уровне всё-таки, во избежание ошибок. Иногда даже с принудительными отступами и отключением lint. Условие может быть не выделено в переменную, как тут, и тогда скобки всё равно появятся, усложняя восприятие.
Насчет разделения разрядов чисел — очень сомнительная фича. Попробую пошутить:
«Давайте сделаем символ обозначающий три нуля — теперь можно нажать кнопку один раз вместо трех! Ммм, а что там в других языках? Давайте прилепим это и это, но на деле просто приправим сахаром! И еще! И еще! Обязательно добавить goto, а в довесок придумать gofrom, чтобы можно было писать вообще что угодно! И кровь из носу необходимы операторы для квантовой неопределенности!»
А вообще лучше бы занимались сильными сторонами JS чем впихиванием свистелок-перделок. В погоне за «улучшением» языка теряется его мощь и красота. Я очень люблю JS, но чем больше его «улучшают» тем меньше я понимаю другой код. Неспроста ругают классы в JS(которые не классы) и пишут на прототипах.
JS — другой язык, и он прекрасен по-своему. Не нужно его делать похожим(всего лишь) на другие популярные языки.
P. S: Это лишь мое мнение, но логика есть логика. Мы стараемся разбивать сложное на простое — элементарное, а не наоборот.
Sign up to leave a comment.