Часто программисты пишут код, который генерирует другой код.
(Технический термин - метапрограммирование , но он встречается чаще, чем просто кросс-компиляторы; подумайте о каждой веб-странице PHP, которая генерирует HTML, или каждый файл XSLT.)
Одной из проблем, с которыми я сталкиваюсь, является разработка методов, гарантирующих, что и рукописный исходный файл, и сгенерированный компьютером объектный файл имеют четкие отступы для облегчения отладки. Эти две цели часто кажутся конкурирующими.
Я считаю это особенно сложным в комбинации PHP / HTML. Я думаю, это потому, что:
- В исходном файле иногда больше HTML-кода, чем генерирующего PHP
- Файлы HTML, как правило, длиннее, чем, скажем, операторы SQL, и требуют лучшего отступа
- HTML имеет функции, чувствительные к пробелам (например, между тегами)
- В результате HTML становится более общедоступным, чем операторы SQL, поэтому требуется больше усилий для разумной работы.
Какие методы вы используете для решения этой проблемы?
<ч />
Изменить: Я принимаю, что есть по крайней мере три аргумента, чтобы не потрудиться генерировать красивый HTML-код:
- Увеличена сложность генерации кода.
- Не имеет никакого значения для рендеринга браузером; разработчики могут использовать Firebug или аналогичный, чтобы хорошо его просматривать.
- Незначительный удар по производительности - увеличено время загрузки пробельных символов.
Я, конечно, иногда генерировал код без учета отступа (особенно SQL).
Однако есть несколько аргументов, выдвигающих другой путь:
- На практике я нахожу, что я делаю часто читающий сгенерированный код - дополнительные шаги для доступа к нему неудобны.
- У HTML есть некоторые проблемы с чувствительностью к пространству, которые иногда кусаются.
Например, рассмотрим код:
<div class="foo">
<?php
$fooHeader();
$fooBody();
$fooFooter();
?>
</div>
Понятнее, чем следующий код:
<div class="foo"><?php
$fooHeader();
$fooBody();
$fooFooter();
?></div>
Однако он также имеет различный рендеринг из-за пробелов, включенных в HTML.