Правила программирования на С и С++. Главы 1-6 - Иметь слишком много уровней абстракции или инкапсуляции так же плохо, как и слишком мало

ОГЛАВЛЕНИЕ

 

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;