На этой неделе Крис Фердинанди исследовал умный фрагмент JavaScript, творчески написанный с новыми синтаксическими функциями, но, возможно, менее читаемый и производительный. Это краткое прочтение, но его призыв к тому, что наша индустрия зациклена на сообразительности, стоит … взывать:
… мы стали одержимыми как отрасль с краткостью и умным кодом, и в результате получается код, который иногда менее производителен и, как правило, труднее читать и понимать для большинства людей.
Он сделал аналогичный аргумент в конце прошлого месяца, когда писал о читабельности кода, отмечая, что краткость может выглядеть круто, но в конечном итоге приводит ко всем видам проблем в кодовой базе:
Зачастую веб-разработчики одержимы краткостью. Это было то, что разработчики будут пытаться написать ту же функцию с минимальным количеством символов.
Лично я считаю краткость бессмысленной. Читаемость намного важнее.
Я полностью согласен с Крисом в этом вопросе, однако я думаю, что есть одно важное различие, и в этом заключается разница между кодом, предназначенным в качестве прототипа, и кодом, предназначенным для производства. Как недавно утверждал Джереми Кит:
Интересно, что — когда дело доходит до создания прототипов — наши обычные приоритеты переднего плана могут и должны выходить за рамки. Приоритет сейчас — скорость. Если это означает пожертвование семантикой или производительностью, то пусть будет так. Если я создаю прототип и думаю: «Какое имя класса подходит для этого компонента?», То я знаю, что у меня неправильное мышление. Этот вопрос может быть актуален для производственного кода, но для прототипов это пустая трата времени.
Я согласен с Крисом, что мы должны писать код, который легко читать, когда мы находимся в производстве. Я также думаю, что экспериментировать с кодом таким способом — хорошая вещь, когда дело доходит до прототипов. Мы никогда не должны стесняться играть с кодом и немного продвигать вещи — пока мы не делаем это в гигантском веб-приложении с командой других разработчиков, работающих вместе с нами.
Я заметил, что есть некоторые люди, которые делают по-настоящему гениальные вещи с Sass. Я постоянно сижу и думаю: «Ух ты, я никогда не видел ничего подобного раньше». Но когда дело доходит до производственного веб-приложения, которое должно быть понято сотнями людей одновременно, я не верю, что именно такую реакцию мы хотим, когда кто-то смотрит на код.
В результате я пытался написать код Sass, который на самом деле настолько прост, что выглядит почти глупо. Один из простых способов сделать код намного проще — уменьшить количество вложений:
.element {
.heading {...}
}
Это выглядит прекрасно, когда внутри есть код — и это довольно легко понять — но добавьте сложный кусочек дизайна в смесь (скажем, с использованием псевдоэлементов и медиазапросов), и у вас неожиданно появится довольно сложный набор правил из вас. Творческий подход и сообразительность может быть сложнее отсканировать и идентифицировать одну небольшую часть кода, который вы ищете. Кроме того, в этом примере мы излишне сделали наш класс .heading
немного более конкретным, что может подтолкнуть нас к хакерской переопределенности в других местах кодовой базы.
Мы могли бы написать следующее:
.element {...}
.element-heading {...}
Я знаю, что это выглядит глупо просто, но отношения между этими двумя классами легче увидеть и расширить в будущем. Объединение всего этого кода в один вложенный класс может быстро выйти из-под контроля. Даже если это выглядит намного круче.
(Кроме того, пост Энди Белла об использовании амперсанда в Sass — и полученные комментарии — является отличным примером столкновения между творчеством и практичностью.)
В любом случае, здесь я пытаюсь подчеркнуть, что CSS (и JavaScript в этом отношении) является странным языком, потому что нет никаких определенных правил, которые можно было бы с этим сделать. Все действительно зависит от кодовой базы и проекта. Но я думаю, что мы можем с уверенностью сказать, что наш код должен быть намного скучнее, чем наши прототипы, когда он переходит в производство.
Продолжайте делать прототипы, которые являются дикими и экспериментальными или невероятно странными! Будь проклят качество кода.