Лекс АйринПравильным считается код, который имеет точно определенные реакции на определенные воздействия, без неявных побочных эффектов. Явные бывают, но считаются не рекомендуемыми.
Это скорее к программе, не к коду. Правильный код - простой, понятный и легко поддерживаемый. Его может развить, поправить и доработать кто то другой, а не только автор после долгих раздумий-воспоминаний что же в этом месте происходит))
и мне не нравятся языки С группы.
Паскаль какраз и есть С с парой плюшек, только для людей, а не для роботов))
residentУ меня всё, что относится к классу или потомкам прикрыто топовым классом, типа неймспейс. Без привязки ничего не болтается. А если надо, то вот оно - хочешь экземпляр создавай, хочешь типы и рули ими. Неверный шаг сделать просто нельзя. Это и есть структура по-моему.
ООПом головного мозга тоже страдать ненадо, ооп подходы невсегда оправданы, зачастую проще какраз без них по другому.
Можете показать на каком-нить примере, как это разделять?
Незнаю что имел ввиду
debi12345, я имел ввиду чтото наподобии этого
http://svn.freepascal.org/svn/fpc/trunk ... c/gutil.pp класс TLess (это генерик для сравнения простых типов) им специализируется TMap для сортировки ключей. Можно использовать TLess, можно подсунуть свою "сравнивалку" ее описание из
http://svn.freepascal.org/svn/fpc/trunk ... rc/gmap.pp :
- Код: Выделить всё
generic TMapCompare<TPair, TKeyCompare>=class
class function c(a,b :TPair):boolean;
end;
,если в качестве ключа используется какойто сложный тип данных.
Пример не очень хороший, т.к. от "сравнивалки" требуется всего один метод - c(Compare). Я сейчас делаю что-то подобное для геометрических данных, там "сравнивалка" посложнее - уже нарисовалось 5 методов. Имхо очень удобный подход - имеем общий генерик описывающий структуру данных, специализируем его типом данных и классом операций над данными (которые невозможно обобщенно описать в генерике) Получается структура данных нужного типа. Класс в данном случае служит объеденяющей "областью видимости" для операций над данными и в моем случае специализация генерика будет выглядеть так:
- Код: Выделить всё
TGeomBinaryTree<TGeomPrimitive,TGeomPrimitiveManipulator>
вместо
- Код: Выделить всё
TGeomBinaryTree<TGeomPrimitive,TGeomPrimitiveCompareFunc1,TGeomPrimitiveCompareFunc2,TGeomPrimitiveCompareFunc3, ... ,TGeomPrimitiveMoveFunc1,TGeomPrimitiveMoveFunc2, ...>
Разве не красота и структурированность?