ES6 дает разработчикам JavaScript больше способов делать вещи. Но это не всегда хорошо.

1656685332 es6 daet razrabotchikam javascript bolshe sposobov delat veshhi no eto

Сэм Уильямс

IidpNBFmiFlBVHE30vqFMcrtZPMTq16BtBpe

Недавно я написал статью о ES6 Tips and Tricks, которая более 17 000 просмотров и 4600 ударов. Один комментарий был от Боба Мунка, который сказал, что:

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

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

Что ES6, 7 и 8 добавляют в JavaScript

Новейшие спецификации добавляют много новейших функций к языку. Деструктуризация, краткое назначение объектов и символы, чтобы назвать несколько. Есть некоторые хорошие вещи, но эта статья имеет целью осветить проблемы.

Почему это проблема?

Вы хотите создать функцию для получения объекта и выполнения определенной логики над ним. Просто так? Но как ты собираешься сделать это?

var data = { a: "print me" };
function method1(data) {    var a = data.a;    console.log(a);}
function method2(data) {    console.log(data.a);}
function method3({ a: info }) {    console.log(info);}
function method4({ a }) {    console.log(a);}

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

Как решить, что использовать?

Существует 3 основных способа решить, каким способом это сделать:

  • Оцените и сравните доступные варианты.
  • Просто используйте все, что хотите.
  • Имейте политику по поводу того, где использовать.

У каждого из них есть свои преимущества и недостатки.

VprwzhiI2Ve-XFhV-6YVbHMSEZhnIXk2wONE
Фото: pixabay.com

Оцените и сравните доступные варианты

Это кажется очевидным выбором, но лучший ли он? Делать это каждый раз означает, что вы должны оценивать преимущества и недостатки каждого метода КАЖДОГО РАЗА, когда вы пишете функцию. Это великая сила мышления, которую можно использовать для решения проблемы, которую вы пытаетесь решить.

Вам и всем, с кем вы работаете, нужно знать достоинства, недочеты и аспекты каждого способа. Это кажется неплохим, их всего 4, но как быть с асинхронным поведением? Используете ли вы обратные вызовы, обещания, генераторы, Async/Await или их комбинацию?

Это означает, что каждый, с кем вы работаете, должен понимать каждую часть речи. По количеству просмотров моей статьи о ES6 я предполагаю, что многие все еще изучают базовый синтаксис языка. Это означает, что очень мало людей понимают сложность асинхронного поведения (я сейчас сам стараюсь хорошо понять).

Просто используйте то, что хотите

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

Проблемы могут возникнуть, когда кто-то другой придется прочесть или исправить ваш код. Вы можете быть мастером JavaScript и знать все новые методы для всего. Но следующий человек, который придется прочитать или изменить вашу работу, может не иметь представления о том, что вы сделали.

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

34VI1AbwgDW-WSK49E5slOcsguRkTQ5yhrIx
Фото: pixabay.com

политика

Независимо от того, это политика компании или личная политика, это устраняет много проблем с первыми двумя подходами. Это не требует размышления и обеспечивает согласованность в кодовой базе. К сожалению, у него все еще есть несколько проблем.

С новыми версиями спецификаций регулярно выходящих ECMAScript возникает дилемма. Должна ли компания изменить свою политику, чтобы она отвечала последним выпускам? Или напишите политику и никогда ее не меняйте – теряете новые функции? Или это должно быть где-нибудь посередине?

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

Что действительно дает ES6+?

Какова подлинная разница между приведенными выше примерами? Легче ли читать новый синтаксис или он предоставляет дополнительные функции?

их предложения должны делать, уменьшив нажатие клавиш и добавив «аккуратные» приемы.

Я действительно не вижу особых, если таковые имеются, преимуществ от использования деструктуризации или сжатого синтаксиса объектов, кроме сохранения нажатий клавиш. Могут быть преимущества производительности или какая-то особая магия, которую я не знаю или не понимаю, но:

Эта разница в производительности вообще не имеет значения! — YDKJS

FYwgy4oQHlGhVRzaeoIsZS96Uh9xO-DY5MYF
Фото: pixabay.com

Эта цитата немного вырвана из контекста, потому я объясню. Предположим, что метод X выполняет 1 000 000 операций в секунду, а метод Y – 500 000 операций в секунду. Это означает, что X вдвое быстрее Y. но разница во времени работы составляет всего 1 микросекунду. Это в 100 000 раз медленнее, чем то, что может воспринять глаз. Следовательно, ни одна разница в производительности не имеет значения!

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

Что также обеспечивает ES6

Путаница, сложность и варианты.

GgQ1Bb9hQJ4YLtUmAEt8Cw6bS0mTzsQ5bkxR

Позже в дискуссии с Бобом он сказал о JavaScript следующее:

Ты должен расшифруйте его чтобы понять, что оно делает. Синтаксис и семантика языка сложны, запутаны, запутаны. Программисты, которые отлаживают, обслуживают, совершенствуют и просматривают ваш код на следующий день или через десятилетие, будут иметь проблемы с его пониманием. Они будут удивляться, было ли то, что вы сделали, невероятно умным или невероятно глупо.

Это так верно со мной. Я заметил, что я просматриваю написанный мной код, пытаясь понять, что я сделал и почему я это сделал. Несмотря на то, что вы можете писать сложный и запутанный код на любом языке, JavaScript дает вам много возможностей догнать себя.

Я сделал это себе в статье ES6. Из 4000 человек, прочитавших всю статью, только 5 удалось найти мою ошибку до того, как я ее исправил. Что с этого правильно?

let person = {     name: "John",     age: 36,     job: { company: "Tesco", role: "Store Assistant"}}
function methodA({ name: driverName, age, job.company: company}){ ... }
function methodB({ name: driverName, age, job: { company }){ ... }

Я использовал не тот, и большинство людей не заметили. Лишь немногим, кто попробовал это, удалось обнаружить ошибку.

rHzev1lGqapGQbzpEBx3HxLckNRfdTJOabk2

Что действительно обеспечивают эти два метода, чтобы оправдать дополнительную путаницу и сложность? Многие люди могут читать, писать и понимать следующую функцию:

function methodC(person){    var driverName = person.name,        age = person.age,        company = person.job.company;    ...}

Да, мне пришлось написать 32 дополнительных символа, но поскольку большинство программирования заключается в обдумывании, а не введении текста, экономим ли мы время на наборе только для того, чтобы потратить больше его на размышления?

Это не просто дополнительное время, которое автор тратит на размышления об этом, это каждый человек, читающий этот код после этого момента (часто снова автор). Сложный код имеет «налог на мышление» всякий раз, когда его читают, и мы, как люди, ежедневно имеем ограниченный запас способности к мышлению.

Не все плохо

Хотя эта статья, кажется, касается ES6, есть некоторые вещи, улучшающие читабельность и удобство обслуживания. Promises, async-функции и async/await помогают абстрагироваться от сложностей асинхронного поведения, делая код более логичным и более легким для чтения. Я считаю, что именно на этом нужно сосредоточиться, а не на трюках сохранения нажатия клавиш.

Долгосрочные последствия

Хотя это, вероятно, не будет иметь никакого значения для вас как разработчика, компании с большим количеством разработчиков могут ощутить влияние. Необходимость сначала понять, что делает синтаксис, прежде чем понять, что делает код, приводит к ненадежному и непригодному для обслуживания коду.

Это может привести к тому, что JavaScript потеряет приверженность всему, что является большим, сложным, критическим или развивающимся. Это был бы огромный рынок, на котором JavaScript бы потерял.

Резюме

  • ES6 дает нам еще больше способов выполнения той же задачи.
  • Вы можете рассчитать, что лучше, делать то, что хотите, или иметь политику на этот счет.
  • ES6 дает нам новые приемы, чтобы сэкономить некоторые нажатия клавиш.
  • Эти новые приемы увеличивают сложность и вероятность ошибок, одновременно уменьшая читабельность.
  • Есть несколько хороших фрагментов ES6, улучшающих читабельность.
  • Может ли повышенная сложность и ухудшение читабельности снизить вероятность того, что компании будут использовать его в сложных, критических или постоянно развивающихся решениях?

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

IlmT2dhqkBmqwHaLmF17l7Qm4pAqBmOnz-9c

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *