Pull to refresh

Comments 29

А самое главное не перевели:

Hello, I am a student in Vancouver, Canada and studying web development.

Понятно зачем это писал hiro9108 и откуда местами неточности. Парень все равно молодец - он учится. Интересно, почему вы посчитали эту статью достаточно полезной, чтобы тратить время на перевод и оставили все ошибки без изменений?

Я выбираю статью по названию, затем быстро пробегаюсь по ней, если считаю, что кому-то перевод может быть полезен, то начинаю переводить. Любую статью считаю полезной.
Для меня они полезны в том, что позволяют получить некоторые данные, дают практику в английском во время перевода, лучше начинаю понимать структуру написания текстов.
Для всех остальных же, также позволяет получить, возможно, новую информацию, которую, на родном языке, воспринимать немного, а иногда и на много легче.

По поводу ошибок, видимо мне не хватило опыта, чтоб их заметить, когда встречаю очевидные ошибки стараюсь отмечать их в тексте как коментарий переводчика. Если у вас есть свободное время, могли бы указать на ошибочные моменты?

Можете ли вы угадать, что вернет этот код?

Результат применения оператора + к двум операндам. Язык на то и имеет динамическую типизацию, что вы описываете скорее логику процесса.

Статья называется "JavaScript vs TypeScript. Почему Вы должны изучить TypeScript?", но тут лишь одно небольшое сравнение, дальше автор объясняет типы в тайпскрипте.

Теперь к переводу

JavaScript – это более свободный язык

если вы встретите много кода в вашем проекте

Я не могу, т.к. pikachu функция может принимать в себя значения любого типа, к примеру, строка, число и т.д.

разработчики должны уделять больше внимания типам аргументов, которые нужны в функции, а также как значение должно возвращаться

У TypeScript есть несколько примитивный типов данных

В порядке бреда: возможно, способность функции принимать параметры любого типа не слабость, а супер сила, а вы пытаетесь уместить гениальное в узкие рамки общепринятого. Подумайте ))

Если серьезно, с типизацией жизнь программиста становится сильно проще, но кто не бредит, тот не пьет шампанское :-)

js дает свободу - хочешь обложись подушками, хочешь - ходи по лезвию, а с тайпскриптом скукота, да

Блог PVS-Studio не раз и даже не два показывал силу и эффективность статического анализа кода как средства отлова ошибок на как можно более ранних стадяих. И вроде бы TypeScript тоже претендует на эту нишу. Но как-то не получается

let data = { a: 1, b: 2, c: 3 };
data = JSON.stringify(data);
data = AnythingOther(data);

И в таком примере TypeScript будет немножечко не доволен

Лично я бы использовал три разных переменных (точнее, три разных константы). С разными именами, отражающими смысл данных.

С другой стороны, в том же Rust, который куда более строг в плане типов чем TS, разрешено объявлять переменные с одним и тем же именем любое число раз, и каждый раз с новым типом...

Ну, если это разные переменные – почему бы нет (можно же в C-подобных языках определять переменную с тем же именем внутри вложенного блока, в Rust просто пошли дальше), хотя я бы предпочёл так не делать. В данном же случае присваиваем значения разных типов одной переменной, imho так не стОит делать.

Или просто использовать данные/результаты как аргументы

const data = AnythingOther(JSON.stringify({ a: 1, b: 2, c: 3 }));  

Если это не сверх громоздко и не требуется для отладки, то не вижу смысла выделять переменную/константу для хранения промежуточного результата.

Да, отличная идея. Просто чудесный код. И лимит в 80 символов соблюдается, и отлаживать легко, и читается тоже прекрасно.

Товарищ сверху написал, что если не требуется для отладки и не громоздко.

Ну и что Вы тут отлаживать будете? Stringify?

То есть несериализуемых в JSON объектов не существует, верно?

Существует. Но не в этом примере. Но Вы не ответили на вопрос

Лично я бы использовал три разных переменных (точнее, три разных константы). С разными именами, отражающими смысл данных.

Это сильно лучше, чем предложение снизу запердолить всё в одну строку. Нередко в этом даже есть смысл. Но в функции, которая занимается, например, только сериализацией данных и ничем больше, заводить гору переменных -- это трэш. Если бизнес скажет, что необходима обфускация потока данных, и вы решите JSON преобразовывать ещё в base64 -- вам придётся затронуть не одну строку, но ещё и следующую. А как удобно в целях отладки отключать этапы! Изменения такого неоднородного кода над одной сущностью будут болезненными.

Всё ещё лучше, чем написать let data:any.

Тайп чекер не спасает от ошибок в реализации бизнес-логики, о которых я рассказал. Удачной отладки!

Ничто не спасает от ошибок в реализации бизнес-логики.
Так можно и IDE выкинуть, ведь "IDE не спасает от ошибок в реализации бизнес-логики".

Спасает написание читабельного кода. Запхать всё в одну строку и навернуть кучу вложенных конструкций в одной строке -- вот уж где и просто читается, и просто отлаживается.

Если раскидать код на отдельные строки -- читается сильно проще

Это тоже не спасает от ошибки бизнес логики.

Я за раскидывание по строкам, не вижу, где утверждал обратное

Бинго. Теперь погнали. Есть 2 сегмента кода:

function doAnything(data: Object) return String {
	data = JSON.stringify(data);
	// data = AnythingOther(data);
	if (data.length < 15) {
    data += ' ' * (15 - data.length);
  }
  return data;
}

Допустим, добавляем 3ю строчку. Например, бизнесу стрельнуло гонять не JSON, а base64. Ошибиться в таком коде сложно. Но, по-вашему, код ужасен:

Таким кодом даже я, как разработчик, недоволен

Исправим его!

function doAnything(data: Object) return String {
	const jsonData: String = JSON.stringify(data);
	// convertedData: String = AnythingOther(jsonData);
	if (jsonData.length < 15) {
    const jsonDataPlus: Srting = jsonData + ' ' * (15 - jsonData.length);
  }
	return jsonDataPlus;
}

Прекрасный код, не находите? Идеалочный. Усложните в своём воображении преобразование на +2 этапа и добавьте больше типов (UInt8Array, ArrayBuffer) и ещё чего-нибудь любопытного -- и начнёт бросаться в глаза сложность сопровождения 2го варианта -- на каждое изменение кода необходимо затрагивать не одну, а минимум 2 строки

// Я в этом коротком примере вылавливаю уже 4й баг. А вот и 5й. Знаете, я начинаю что-то понимать в этой жизни. С такой манерой написания кода у программистов всегда будет работа. В аду.

В принципе, если число таких функций будет расти дальше, есть резон всё это заменить на Array.reduce, но это уже другая история и не всегда возможно

О каком реалмайм анализаторе в TS идёт речь?

Подсветка ошибкой при неправильном использовани js. Типа стираешь переменную присваивая ей undefined. Он говорит незя

Это компайл тайм, а не рантайм(этого в TS никогда не было)

у них же не реалтайм анализатор в отличие от ts?

Что TS, что анализатор PVS-Studio позволяют обнаружить ошибки до запуска кода

Sign up to leave a comment.

Articles