|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от mazzy
![]() давным давно разработчики аксапты из даамгаарда исповедовали принцип самокомментирующегося кода (см. книги фаулера про рефакторинг) - это когда названия переменных/методов раскрывают суть выполняемых действий, а длина каждого метода невелика и выполняемые действия очевидны. но в ходе развития, из-за того, что надо обеспечивать совместимость и на уровне названий методов, принцип самодокументирующегося кода не удалось выдержать. сейчас есть классы и методы, названия которых не соответствуют тем действиям, которые реально выполняются. сейчас есть методы-портянки на мамндацать страниц (например, широко известный в узких кругах метод SettleNow).
Это мы сейчас про что говорим, про курсовую работу по информатике или про ERP-систему? Оно, конечно, здорово писать такой код, где имена говорят сами за себя, а методы содержат лишь дюжину-другую строк, но если модифицировать код системы не за счет бесконечных условных ветвлений в одних и тех же методах, а за счет использования ООП, то зачастую получаются классы-наследники, где перекрыты отдельные методы, обычно параметрические, или до/после вызова super() есть какой-то кусочек кода. Так вот, если не помнить наизусть, как работает родительский класс (а у меня лично иерархии наследования достигают подчас 4-х уровней, считая после RunBaseBatch), то код становится ну совсем непрозрачным, а предположения, в нем используемые, - совсем неочевидными. И в такой ситуации комментарий вида "эта переменная уже инициализирована там-то" спустя полгода-год позволяют намного быстрее разобраться в собственном же коде, не говоря даже про чужой. |
|
|
За это сообщение автора поблагодарили: denny (1), oip (1). |
![]() |
#2 |
Moderator
|
Цитата:
Ой, неужели сопоставление было написано уже после того, как Дамгаард продался Навижену?
Цитата:
Оно, конечно, здорово писать такой код, где имена говорят сами за себя, а методы содержат лишь дюжину-другую строк, но если модифицировать код системы не за счет бесконечных условных ветвлений в одних и тех же методах, а за счет использования ООП, то зачастую получаются классы-наследники, где перекрыты отдельные методы, обычно параметрические, или до/после вызова super() есть какой-то кусочек кода.
Цитата:
Так вот, если не помнить наизусть, как работает родительский класс (а у меня лично иерархии наследования достигают подчас 4-х уровней, считая после RunBaseBatch), то код становится ну совсем непрозрачным, а предположения, в нем используемые, - совсем неочевидными. И в такой ситуации комментарий вида "эта переменная уже инициализирована там-то" спустя полгода-год позволяют намного быстрее разобраться в собственном же коде, не говоря даже про чужой.
Кроме того, почему то никто не упоминал, что комментарии имеют обыкновение устаревать по мере изменения кода, а устаревший комментарий хуже, чем отсутствующий. Пойду даже дальше и признаюсь, что я считаю нецелесообразным даже помечать модифицированный код в стиле X++: <-- -- > Для решения подобных задач предназначены cvs - системы и, если я ничего не пропустил, со своей задачей они пока справляются. |
|
|
За это сообщение автора поблагодарили: Maxim Gorbunov (4), EVGL (3), petr (2). |
![]() |
#3 |
Участник
|
Цитата:
но таким страшным он стал не сразу. ![]() |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
Цитата:
![]() Обычно этот метод когда требуется модификация, приходится изучать чуть ли не с нуля, несмотря на то, что я там уже наставил своих комментариев. Как раз случай, когда из-за ошибок дизайна комментарии слабо помогают. А подход к комментариям у меня еще со времен изучения Дейкстры не изменился:
PS: естественно, не Дейкстры, а Кнута. Дейкстра это был мой кошмар при сдаче зачета по алгоритмам. Последний раз редактировалось Raven Melancholic; 26.06.2009 в 11:02. Причина: Память подвела |
|