среда, 23 июня 2010 г.

[prog] Простая штука, за которую я очень благодарен Pascal-ю

В языке Pascal есть хорошая штука: с помощью блока type можно назначать имена своим типам

type
   TicketsArray : array[0..10] of Ticket;

И затем в программе использовать эти имена. Преимуществ у такого подхода было несколько. Во-первых, сокращается объем кода кода. Во-вторых, проще сопровождать код, т.к. при уточнении или изменении типа часто достаточно всего лишь изменить его описание.

Причем, насколько я помню, стиль программирования на Pascal не только поощрял подобное использование секции type, но и даже требовал этого. По крайней мере благодаря книжкам (среди которых замечательная тонкая книжица за авторством Вильвачева и Крисевич по Паскалю) и Лубочкину Александру Васильевичу, читавшему нам на первом курсе предмет “Языки программирования и конструирование программ”, я стал постоянно использовать этот прием.

В C/C++, к счастью, есть очень похожая возможность. Это старый добрый typedef. А вот в Java, например, typedef-а нет. Поэтому я на Java и не программирую ;) И в Eiffel так же typedef-а нет, и на Eiffel я так же не программирую ;) Но это уже “Остапа понесло” :)))

Так вот, к сожалению своему, приходится наблюдать, как многие C++ программисты игнорируют существование такой замечательной штуки, как typedef :(

Не могу я понять, как можно писать вот столько кода:

std::map< ticket_key_t, ticket_t > tickets;

void f( const std::map< ticket_key_t, ticket_t > & tickets )
   {
      std::map< ticket_key_t, ticket_t >::const_iterator oldest =
            find_oldest_ticket();
      for( std::map< ticket_key_t, ticket_t >::const_iterator
            it = tickets.begin() ... )
         ...
   }

Когда можно написать и меньше, и понятнее:

typedef std::map< ticket_key_t, ticket_t > ticket_map_t;
ticket_map_t tickets;

void f( const ticket_map_t & tickets )
   {
      ticket_map_t::const_iterator oldest = find_oldest_ticket();
      for( ticket_map_t::const_iterator
            it = tickets.begin() ... )
         ...
   }

Видимо, у этих C++ников не было опыта программирования на нормальном Pascal-е в молодости. Не было той школы. К сожалению.

Ну ничего, будем бить по рукам и приобщать к хорошему :)

Отправить комментарий