Должен ли сгенерированный код быть читаемым человеком? - PullRequest
6 голосов
/ 15 сентября 2008

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

Но это заставило меня задуматься: насколько понятным человеку должен быть сгенерированный код? Когда следует приложить дополнительные усилия, чтобы убедиться, что сгенерированный код легко читается и понимается человеком?

В моем случае сгенерированные мной классы - это, по сути, просто контейнеры для некоторых данных, связанных с другой частью сборки, с методами для получения данных. Никто никогда не должен смотреть на код для самих классов, он просто должен вызывать различные методы получения, предоставляемые классами. Так что, вероятно, это не так уж важно, если код «чистый», хорошо отформатирован и легко читается человеком.

Однако что произойдет, если вы генерируете код, в котором содержится более чем небольшое количество простой логики?

Ответы [ 22 ]

0 голосов
/ 15 сентября 2008

Абсолютно да, для тонны веских причин, уже упомянутых выше. И еще одно: если ваш код должен быть проверен асессором (на предмет безопасности и надежности), было бы лучше, если бы этот код можно было использовать человеком. Если нет, оценщик откажется оценить его, и ваш проект будет рекомендован властями. Тогда единственное решение - оценить ... генератор кода (обычно это гораздо сложнее;))

0 голосов
/ 15 сентября 2008

Сгенерированный код - это код, и нет причин, по которым какой-либо код не должен быть читаемым и красиво отформатированным. Это дешево, особенно в генерируемом коде: вам не нужно применять форматирование самостоятельно, генератор делает это за вас каждый раз! :)

В качестве дополнительного варианта, если вы действительно ленивы, как насчет передачи кода через утилиту beautifier по вашему выбору перед записью его на диск, чтобы обеспечить хоть какой-то уровень согласованности. Тем не менее, почти все хорошие программисты, которых я знаю, форматируют свой код довольно педантично, и для этого есть веская причина: нет кода только для записи.

0 голосов
/ 15 сентября 2008

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

Для примера из реального мира - посмотрите на все, что генерирует Visual Studio. Хорошо отформатирован, с комментариями и всем.

0 голосов
/ 15 сентября 2008

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

  1. Сгенерированный код, который не предназначен для просмотра разработчиком. например, код xml-ish, который определяет макеты (например, файлы .frm или ужасные файлы, сгенерированные SSIS)
  2. Сгенерированный код, который должен стать основой для класса, который впоследствии будет настроен вашим разработчиком, например, сгенерирован код для уменьшения количества набранных слов

Если вы делаете последнее, вы определенно хотите, чтобы ваш код читался человеком.

Классы и интерфейсы, независимо от того, насколько «недопустимы» разработчики, как вы думаете, должны быть, почти наверняка попадут под сгенерированный тип кода номер 2. Они будут поражены отладчиком в один момент другого - применяя форматирование кода это наименьшее, что вы можете облегчить процесс отладки, когда компилятор обращается к этим сгенерированным классам

0 голосов
/ 15 сентября 2008

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

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

0 голосов
/ 15 сентября 2008

Если этот код, скорее всего, будет отлажен, вам следует серьезно подумать о том, чтобы сгенерировать его в удобочитаемом формате.

0 голосов
/ 15 сентября 2008

Логика всегда должна быть читабельной. Если кто-то собирается прочесть код, попытайтесь поставить себя на его место и посмотреть, сможете ли вы полностью понять код на высоком (и низком?) Уровне, не читая этот конкретный фрагмент кода.

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

0 голосов
/ 15 сентября 2008

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

Однако, как только разработчик может прочитать код, чтобы понять, как что-то происходит, он должен быть читаемым. Что если в логике есть ошибка? Как кто-нибудь когда-нибудь обнаружит это, если никто не сможет прочитать и понять код? Я бы зашел так далеко, что генерировал комментарии для более сложных логических разделов, чтобы выразить намерение, чтобы легче было определить, действительно ли есть ошибка.

0 голосов
/ 15 сентября 2008

Сгенерированный код должен быть читабельным (формат и т. Д. Обычно могут обрабатываться наполовину достойной IDE). На каком-то этапе жизни кода кто-то его увидит, и он захочет разобраться в этом.

0 голосов
/ 15 сентября 2008

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

...