PreviousUpNext

12.19  Favor Subpackages Over Prefixes

In general it is better to use subpackages rather than identifier prefixes for datatype namespace management. For example

    package wa {
        Window_Attribute
          = BACKGROUND_NONE
          | BACKGROUND_PARENT_RELATIVE
          | BACKGROUND_RW_PIXMAP          dt::Rw_Pixmap
          | BACKGROUND_RO_PIXMAP          dt::Ro_Pixmap
          | BACKGROUND_COLOR              rgb::Rgb
          #
          | BORDER_COPY_FROM_PARENT
          | BORDER_RW_PIXMAP              dt::Rw_Pixmap
          | BORDER_RO_PIXMAP              dt::Ro_Pixmap
          | BORDER_COLOR                  rgb::Rgb
          #
          | BIT_GRAVITY                   xt::Gravity
          | WINDOW_GRAVITY                xt::Gravity
          #
          | CURSOR_NONE
          | CURSOR                        cs::Xcursor
          ;
    };

is better than

    Window_Attribute
      = WA_BACKGROUND_NONE
      | WA_BACKGROUND_PARENT_RELATIVE
      | WA_BACKGROUND_RW_PIXMAP          dt::Rw_Pixmap
      | WA_BACKGROUND_RO_PIXMAP          dt::Ro_Pixmap
      | WA_BACKGROUND_COLOR              rgb::Rgb
      #
      | WA_BORDER_COPY_FROM_PARENT
      | WA_BORDER_RW_PIXMAP              dt::Rw_Pixmap
      | WA_BORDER_RO_PIXMAP              dt::Ro_Pixmap
      | WA_BORDER_COLOR                  rgb::Rgb
      #
      | WA_BIT_GRAVITY                   xt::Gravity
      | WA_WINDOW_GRAVITY                xt::Gravity
      #
      | WA_CURSOR_NONE
      | WA_CURSOR                        cs::Xcursor
      ;

The crucial difference is that the subpackage formulation gives the application programmer the option of abbreviating

    case attribute
        #
        wa::BACKGROUND_NONE            => ... ;
        wa::BACKGROUND_PARENT_RELATIVE => ... ;
        wa::BACKGROUND_RW_PIXMAP _     => ... ;
        wa::BACKGROUND_RO_PIXMAP _     => ... ;
        wa::BACKGROUND_COLOR     _     => ... ;
        wa::BORDER_COPY_FROM_PARENT    => ... ;
        wa::BORDER_RW_PIXMAP     _     => ... ;
        wa::BORDER_RO_PIXMAP     _     => ... ;
        wa::BORDER_COLOR         _     => ... ;
        wa::BIT_GRAVITY          _     => ... ; 
        wa::WINDOW_GRAVITY       _     => ... ;
        wa::CURSOR_NONE          _     => ... ;
        wa::CURSOR               _     => ... ;
    esac;

as

    {   include wa;

        case attribute
            #
            BACKGROUND_NONE            => ... ;
            BACKGROUND_PARENT_RELATIVE => ... ;
            BACKGROUND_RW_PIXMAP _     => ... ;
            BACKGROUND_RO_PIXMAP _     => ... ;
            BACKGROUND_COLOR     _     => ... ;
            BORDER_COPY_FROM_PARENT    => ... ;
            BORDER_RW_PIXMAP     _     => ... ;
            BORDER_RO_PIXMAP     _     => ... ;
            BORDER_COLOR         _     => ... ;
            BIT_GRAVITY          _     => ... ; 
            WINDOW_GRAVITY       _     => ... ;
            CURSOR_NONE          _     => ... ;
            CURSOR               _     => ... ;
        esac;
    };

but the prefix formulation allows no such convenient de-uglification trick.

This rule is a special case of: Favor explicit representations over implicit ones.


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext