04.09.2012, 23:25 | #1 |
Участник
|
Главный принцип хорошего кода
Цитата:
Что можно сказать о плохом коде?
[list][*]ничего не понятно[*]непонятные переменные[*]огромные методы[*]неочевидные алгоритмы[*]хаки, нарушения инкапсуляции[*]высокая сложность и запутанность[*]изменения приводят к сюрпризам[*]ничего не понятно Я недаром дважды указал один и тот же момент. Действительно, практически все сводится к тому, что программист не может разобраться с неким кодом. ... Все, что можно отделить и назвать — должно быть отделено и названо. ... Альтернативное мнение Не все согласны с тем, что это — хорошая методика. Есть такое правило: выносить в отдельные методы только тот код, который может использоваться где-то еще. Если выносить все методы, то тогда возрастает когнитивная нагрузка из-за того, что программист вынужден будет ездить по файлу вверх-вниз в поисках нужного метода, вместо того, чтобы видеть все перед глазами. Я считаю, что здесь нужна мудрость. Ни практика принудительной экстракции всех алгоритмов, ни упаковка кода в один метод не дадут читаемый код сами по себе. Здесь нужно выработать вкус и тонкое чувство наития, подсказывающее, где стоит выделять код, а где нет. Один из способов решить этот конфликт выглядит следующим образом. Выносим все методы, какие только можно. В течении пары дней изменения не откатываем, терпим. Через дня три станет мучительно понятно, какие методы таки нужно вернуть обратно. стоит отметить, что в аксапте методично применялся такой подход. по крайней мере в базовых классах (например, InventMovement и потомки. например, ledgerjournalengine). и я бы не сказал, что методичное применение такого подхода сильно облегчило жизнь при чтении кода. может быть, я чего не понимаю? что думаете? |
|
05.09.2012, 00:50 | #2 |
Участник
|
Цитата:
Все, что можно отделить и назвать — должно быть отделено и названо.
Я считаю, что здесь нужна мудрость. Ни практика принудительной экстракции всех алгоритмов, ни упаковка кода в один метод не дадут читаемый код сами по себе. Здесь нужно выработать вкус и тонкое чувство наития, подсказывающее, где стоит выделять код, а где нет. Таким рефакторингом можно заниматься... |
|
05.09.2012, 01:24 | #3 |
Banned
|
Программировать в три прохода. Первый неважно как лишь бы работало. Прототип.
Второй проход рефакторинг с выделением методов и классов. Третий проход при проверке всех вариантов использования, то есть расширение. Сразу правильный дизайн сделать сложно, легче итерациями. Но опыт да помогает накидать что- то близкое сразу. Да и наверное третье и второе лучше поменять местами Когда просят писать точные спецификации с дизайном для индусов, я трачу больше времени чем бы запрограммировал сам. |
|
05.09.2012, 01:35 | #4 |
Banned
|
Анекдот для знающих. Одно слово. "SettleNow". Не смешно но хочется сразу удавиться. И в индусском стиле кодирования такое случается черер раз. Все в один метод. Желательно на контроле. Мир плоский. На черепахе.
Поэтому я часто просто счастлив если виду хоть какое то ООП, бог с ним с идеальным выделением методов. Хотя очень часто приходиться вырезать чужой код в отдельный метод чтобы вызывать то же а не копировать. То есть то что может запускаться отдельно должно отделяться. |
|
|
За это сообщение автора поблагодарили: SRF (1). |
|
|