Автор оригинала: FreeCodeCamp Community Member.
Сэм Уильямс
Я недавно написал статью о ES6 советы и трюки который имеет более 17 000 просмотров и 4600 хлопьев. Один комментарий был из Боб Манк кто это сказал:
Кажется, его мнение, кажется, если язык меняется так же, как и оно подписывает свой собственный смертный приговор.
Какие 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 основных метода решения того, какой способ сделать это:
- Оцените и сравните доступные варианты.
- Просто используйте все, что вы хотите.
- Иметь политику, о которой использовать где.
Каждый из них имеет свои преимущества и недостатки.
Оцените и сравните доступные варианты
Это похоже на очевидный выбор, но это лучший? Делать это каждый раз означает, что вы должны оценить преимущества и недостатки каждого метода каждый раз, когда вы пишете функцию. Это много мыслительной силы, которая может быть использована в проблеме, которую вы пытаетесь решить.
Вы и все, с которыми вы работаете, нужно знать преимущества, недостатки и нюансы каждого метода. Это не кажется неплохо, есть только 4, но тогда как насчет дело с асинхронным поведением? Используете ли вы обратные вызовы, обещания, генераторы или ASYNC/ждать или их комбинацию?
Это означает, что все, с которыми вы работаете, должны понимать каждый бит языка. Я догадаюсь по количеству взглядов на мою статью ES6, что многие люди по-прежнему изучают некоторые из более базового языкового синтаксиса. Это означает, что очень мало кто понимает сложности асинхронизации (которые в настоящее время я пытаюсь понять себя хорошо).
Просто используйте все, что вы хотите
Это самый распространенный подход для физических лиц и в компаниях. Это может быть здорово, так как значит, что вы не тратите время и усилия, рассчитывая лучший выбор.
Проблемы могут возникнуть, когда кто-то другой придет, или исправить, ваш код. Вы можете быть Wiz JavaScript Wiz и знают все новейшие методы для всего. Но следующий человек, который приходит, чтобы прочитать или изменить вашу работу, возможно, не имеет подсказки, что вы сделали.
Это также поощряет огромные различия в стиле между компаниями и коллегами. Это также может означать различия между собой и будущим вами, когда вы узнаете новый синтаксис. Это не отлично и делает код чтения, написанным несколькими разработчиками гораздо сложнее.
Политика
Будь то политика компании или личная политика, это устраняет много проблем с первыми двумя подходами. Это не требует мышления, и он способствует согласованности через кодовую базу. К сожалению, у него все еще есть несколько проблем.
С новыми версиями технических характеристик Ecmascript регулярно выходит, приходит дилемма. Если компания изменит свою политику, чтобы соответствовать новейшим выпускам? Или напишите политику и никогда не меняйте ее – отсутствуют на новых функциях? Или это должно быть где-то между ними?
Новые напросы должны изучать политику и знать, как его использовать. Да, у вас может быть буклет на политике, но может потребоваться больше времени, чтобы найти спецификацию, чем писать строку кода. Даже если они находят политику по поведению Async, они тогда должны быть в состоянии использовать его. Это может в конечном итоге подавить Junior Devs к простому кодированию, поскольку они не хотят разбить политику , массивно ограничивая их рост.
Что ES6 + действительно предоставляет?
Какова реальная разница между примерами, которые я дал выше? Новый синтаксис проще прочитал или предоставляет любые дополнительные функции?
Я действительно не могу сильно видеть, если есть, выгодно использовать разрушительную или краткую синтаксис объекта, кроме спасения нажатий клавиш. Может быть преимущества производительности или особая магия, которую я не знаю или понимаю, но:
Ни одно из этой разницы на производительности не имеет значения, вообще! – YDKJS.
Эта цитата рода вывезена из контекста, поэтому я объясню. Предположим, что метод x работает 1 000 000 операций/секунды и метод y проходит 500 000 операций/секунды. Это означает, что х в два раза быстрее, чем Y. Но Разница во время выполнения составляет всего 1 микросекунда. Это в 100 000 раз медленнее, чем то, что может воспринимать человеческий глаз. Так что ни одна из различий в производительности вообще не имеет значения!
Экономия, сделанная с использованием разных методов, вероятно, будет настолько крошечной, что не имеет значения. Если вы пытаетесь написать самый быстрый код, почему вы пишете в JavaScript?
Что ES6 также обеспечивает
Путаница, сложность и варианты.
Позже в обсуждении с Бобом он сказал это о 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 }){ ... }
Я использовал не тот, и большинство людей не заметили. Только немногие, которые попробовали это удалось найти ошибку.
Что эти два метода действительно обеспечивают оправдание дополнительной путаницы и сложности? Многие люди могли читать, писать и понимать функцию, как это:
function methodC(person){ var driverName = person.name, age = person.age, company = person.job.company; ...}
Да, мне пришлось писать 32 дополнительных персонажей, но поскольку большая часть программирования мышление, а не печатать, мы экономите время, набрав только, чтобы потратить больше этого, думая?
Это не просто дополнительное время, которое автор тратит об этом, это каждый человек, который читает этот код после этого момента (часто автор снова). Сложный код имеет «мыслительный налог» каждый раз, когда он читается, и мы, как у людей, только имеют ограниченное предложение мощи мышления каждый день.
Не все плохо
Хотя эта статья кажется, что усложняет ES6, существуют некоторые вещи, которые увеличивают читабельность и ремонтопригодность. Обещания, асинхронистые функции и Async/ждут всех помогают абстрагировать сложности асинхронного поведения, делая код более логичным и легче читать. Это то, что я полагаю, должен быть сосредоточен, не сэкономившись на KeyStroke.
Долгосрочные эффекты
Хотя это, вероятно, не будет иметь никакого значения для вас как разработчик, компании с множеством разработчиков могут почувствовать воздействие. Чтобы сначала понять, что делает синтаксис перед пониманием того, что код делает результаты в ненадежном и необслуживаемым кодом.
Это может привести к тому, что JavaScript теряет о чем-то, что является крупным, сложным, критическим или развивающимся. Это будет массивный рынок для JavaScript, чтобы проиграть.
Резюме
- ES6 дает нам еще больше способов сделать ту же задачу.
- Вы можете рассчитать то, что лучше, делать то, что вы хотите, или у вас есть политика.
- ES6 дает нам новые трюки для сохранения некоторых нажатий клавиш.
- Эти новые хитрости повышают сложность и шансы ошибок при уменьшении читаемости.
- Есть несколько хороших битов ES6, увеличивая читаемость.
- Может ли повысить сложность и уменьшенную читаемость сделать компании менее склонны использовать его в сложных, критических или постоянно развитых решениях?