Правила программирования на С и С++. Главы 1-6 - Иметь слишком много уровней абстракции или инкапсуляции так же плохо, как и слишком мало
ОГЛАВЛЕНИЕ
Страница 59 из 93
52. Иметь слишком много уровней абстракции или инкапсуляции так же плохо, как и слишком мало.
Основной смысл использования таких абстракций, как функции или символьные константы (или инкапсуляций, подобных определениям struct или class), заключается в улучшении читаемости программ. Не пользуйтесь ими просто потому, что вы можете делать это. Например, вложенные структуры в данном фрагменте не служат какой-либо полезной цели:
struct tree_node;struct child_ptr
{
unsigned is_thread;
struct tree_node *child;
};
struct tree_node
{
struct child_ptr left,
right;};tree_node *p;
if ( !p->left.am_a_thread )
p = p->left.child;
Следующий код лучше читается, потому что в нем меньше точек, и легче сопровождается, так как в нем нужно отлаживать на одно определение меньше: struct tree_node{
struct tree_node *left_child;
unsigned left_is_thread : 1;
struct tree_node *right_child;
unsigned right_is_thread : 1;
};
if ( !p->left_is_thread )
p = p->left_child;