Задать вопрос
herfleisch
@herfleisch

Стоит ли использовать typedef?

Меня интересует исключительно целезообразность использования typedef в плане дальнейшей поддержки кода. Стоит ли писать
typedef int mytype;
mytype newVariable;


вместо простого
int newVariable;

С одной стороны имя нового типа будет говорить разработчику о его назначении, будет понятно что тип minutes — это минуты, а не часы или ещё что-либо. С другой стороны от разработчика скрывается информация о родительском типе: диапазон значений, формат и т.д.


Гради Буч говорит использовать typedef. Роберт Мартин об этом даже не заикается. Каково ваше мнение?
  • Вопрос задан
  • 2837 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
susl
@susl
по умолчанию использовать.
typedef int minutes;
minutes x;
лучше
int x;
хотя бы потому что сегодня это int, завтра это может быть double, а послезавтра si::minutes
главное что это минута, а не как она реализована, так ведь?
Ответ написан
mark_ablov
@mark_ablov
использую typedef только для сокращения.
например:
typedef std::pair <std::vector <somens::sometype>, anotherns::antohertype> myPair;
Ответ написан
Комментировать
VBart
@VBart
Без typedef скорее всего вы не сможете написать переносимое приложение.
Ответ написан
Комментировать
Bright
@Bright
С одной стороны имя нового типа будет говорить разработчику о его назначении, будет понятно что тип minutes — это минуты, а не часы или ещё что-либо. С другой стороны от разработчика скрывается информация о родительском типе: диапазон значений, формат и т.д.


В вашем примере как раз всё понятно. Minutes — целочисленный беззнаковый тип, диапазон допустимых значений от 0 до 59.

Имхо, typedef стоит использовать, если это помогает сделать код более читаемым. Выше, например, указал такой случай.
Ответ написан
@Speakus
Senior iOS developer
надо использовать, хотя бы потому что:
minutes TravelTime;
намного лучше читается чем
int TravelTime;
Ответ написан
xanep
@xanep
Все зависит от конкретного случая. У вас вопрос слишком абстрактно поставлен.
typedef int mytype;
mytype newVariable;

Этот код совершенно ничего не говорит о том, что это за тип mytype и как он будет использоваться.
То же самое с типом «minutes». Без понимания как и где он будет использоваться, ответить невозможно. В общем случае для работы со временем удобнее использовать специальные классы, которые могут представлять время не только в минутах, а и в месяцах-днях-часах.

Как по мне, то typedef есть смысл использовать в таких случаях:
1. Сократить длинные типы (в С++0х можно будет использовать auto для этого)
2. Для возможного выбора между точностью и скоростью/используемой_памятью (между float и double, например)

Ну а для переносимости кода между архитектурами с различной битностью уже есть типы size_t, uintptr_t, ptrdiff_t. Не надо изобретать велосипед.

>надо использовать, хотя бы потому что:
>minutes TravelTime;
>намного лучше читается чем
>int TravelTime;

Это от лукавого. За мнимой читаемостью совершенно не ясно, могу ли я написать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы