Правила программирования на Си и Си++

       

Иметь слишком много уровней абстракции или инкапсуляции так же плохо, как и слишком мало


Основной смысл использования таких абстракций, как функции или символьные константы (или инкапсуляций, подобных определениям 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;



Содержание раздела