Написал вчера вот такую строчку:
static const threading threading = THREADING; |
Почему-то вспомнился термин тавтология ;)
Это я местами пытаюсь следовать стилю именования классов из C++/Boost, где не принято давать суффиксы _t именам нешаблонных классов. Если же вернуться к моему старому, проверенному годами, стилю, то было бы вот так:
static const threading_t threading = THREADING; |
Тоже не образец изящного стиля, но для меня чуть понятнее.
Собственно, пока в C++ не начал широко использоваться STL, использование нотации с суффиксом _t для имен типов не вызывало особых сложностей. Но вот когда STL, а затем и Boost, пошел в массы, возникают штуки, когда суффикс не то, чтобы мешает, но выставляет наружу слишком много информации. Ну, например, если суффикс _t используется:
std::sort(a.begin(), a.end(), my_predicate_t(b, c, d)); tools::adaptor_t< reader_t, multithreading_t::safe, file_logger_t > adaptor; |
Глядя на такой код программист понимает, что при вызове std::sort в качестве предиката создается экземпляр типа my_predicate_t. А в параметрах шаблона adaptor_t используются имена типов reader_t, multithreading_t, file_logger_t.
С одной стороны это хорошо. Но с другой, при сопровождении кода, это знание может только мешать. Например, если my_predicate должен стать вызовом возвращающей хитрый объект функции. Или, если со временем multithreading_t перестанет быть типом, а станет, скажем, пространством имен. А reader_t из типа превратится в константу. Если бы в коде было изначально записано вот так:
std::sort(a.begin(), a.end(), my_predicate(b, c, d)); tools::adaptor_t< reader, multithreading::safe, file_logger > adaptor; |
То при сопровождении вообще менять бы ничего не пришлось.
На такие вещи я периодически натыкаюсь. И поэтому мой старый стиль именования типов мне иногда не нравится. А для имен типов, которые могут быть предикатами или параметрами шаблонов, стараюсь использовать имена без суффикса _t. Что терпимо, но некоторой шизофренией отдает: здесь _t используется, а вот здесь не используется, а вот здесь не понятно :(
С другой стороны, от суффикса _t оказываться так же не хочется. Ибо с ним можно запросто писать вот так:
threading_t threading = threading_t::single; if( is_multicore_environment() ) threading = threading_t::multi; |
Не доводя дело до "масла масляного":
threading threading = threading::single; if( is_multicore_environment() ) threading = threading::multi; |
PS. Как бы мелко эта тема не выглядела, она, тем не менее, затрагивает одну из фундаментальнейших и сложно разрешимых проблем в программировании: выбор удачных названий для идентификаторов ;)
PPS. CamelCase -- это пройденный этап. Кому интересно, отправляю в историю: "О том, как я от CamelCase к lower_case пришел".
Комментариев нет:
Отправить комментарий