Pull to refresh

Comments 17

Помнится, подобным образом в JSON иногда комментарии хранят. Та еще палка о двух концах.
> Хранение стилей в одном файле с js-компонентом.
Не самый хороший пример, на мой взгляд.

И да, такой приём не очень явный и читабельность не сильно улучшает.
>И да, такой приём не очень явный и читабельность не сильно улучшает.

Объединение нескольких JS/CSS в один файл и их минификация читабельность тоже не повышают :) Однако являются очень рекомендуемой процедурой.
Только обычно это делается каким-нибудь grunt'ом и только для продакшена.
<script type="text/html"> как шаблон?

А если стили, то можно запихнуть в объект, и функцией по ключам задать все значения нужному элементу.
Я тоже за такой вариант.
В том же WebGL подобным образом удобно хранить шейдеры, если они не подгружаются, а уже указаны в тексте страницы.
Что-то вроде:
<script id="shader-fs" type="x-shader/x-fragment">
...
</script>
<script id="shader-vs" type="x-shader/x-vertex">
...
</script>
Разница лишь в том, что у меня всё в одном файле хранится. Иногда бывает, что нет доступа к целевой странице.
Если эта статья лишь показать как работает `toString` в JS — тогда ОК ). А сам по себе метод хранения данных в комментариях в теле функции — ужас. Если данных много, то только в отдельных файлах, есть много модульных систем, которые подгружают помимо скриптов также и данные, а для релиза все будет собрано в один файл. Если нет возможности использовать модульную систему — есть другие варианты, где сборка происходит через // import data.yml с предварительной трансформацией.

Было бы интересно посмотреть на реализацию `docstrings` через комментарии, или на интересную технику с использованием комментариев с мета информацией для функций, аля аспектно-ориентированное программирование.
Исследовал такой вопрос для того, чтобы кроссбраузерно хранить многострочные данные в юзерскриптах и простых скриптах (потому что в userJS скрипт — это вообще единственное представление единственного файла). Оказалось — по особенностям Firefox в нём вообще нельзя хранить так многострочные данные, но в юзерскриптах извернуться можно за счёт встроенных функций. (Возможно, со временем появится там хак, но насущной необходимости в нём нет, только ради искусства.)
Все остальные браузеры позволяли решить задачу как в юзерскриптах, так и в просто скриптах подробности по ссылке.)
А что не так с файрфоксом? Если добавить в ваш пример скобочки, то у меня в консоле работает:
s = (function(){/*

    произвольные многострочные данные, кроме завершения комментария

*/}).toString()
У него .toString() выкусывало комментарии, возвращало только некомментированную составляющую функции. Сейчас — работает. Не ожидал, что сами по себе решат этот вопрос без особого интереса сообщества к нему. Тогда у него была 12-я версия. Тогда вообще без проблем будет работать в современных версиях браузеров.
Подход интересный и необычный, вот только в прах ломает каноны JS: то, что предназначено для программиста, используется машиной. Комментарии изначально использовались для документации кода, максимум — для утилит автоматической генерации документаций. Думаю, метод найменьшего сопротивления в данном случае — добавить, по крайней мере, некие директивы внутрь этого комментария со стилем, например, @inline: css@, чтобы было понятно, что это — не просто коммент, который нужно вырезать, а часть кода, необходимого для работоспособности скрипта. Возможно, еще и научить минификаторы не вырезать его и правильно обрабатывать.
А так — идея мне нравится: иногда очень неудобно связывать кучу ресурсов-зависимостей в веб-программировании и гораздо проще забандлить всё в один файл.
Поэтому и поставил хаб «Ненормальное программирование». Естественно данный метод нужно применять тогда, когда точно уверен, что стоит так делать. А для решения каждодневных задач есть более традиционные способы.
Похоже я слишком «нормальный» т. к. хоть сколь рационального способа применения этому я не найду за всю жизнь.
Здесь комментарий нужно сделать «важным»: /*! иначе его минимизаторы будут вырезать.
Sign up to leave a comment.

Articles