Здравствуйте, Shmj, Вы писали:
S>Если не указывать тип везде, где только возможно — использовать auto. Какие минусы?
Минус очевидный — не видишь типа.
Без навороченной IDE не сможешь и шагу ступить.
А иной раз и сама IDE может не показать корректный тип.
Если тип очевиден, то auto — хороший способ сократить километровую запись, к примеру, какие-нить итераторы у стандартных контейнеров.
Но иногда полезно иметь тип перед глазами.
Добавлю: есть ещё различные интерфейсы, наследование.
Иногда требуется получить конкретный тип.
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>На это тебе сейчас возразят, что у func должно быть красноречивое название, чтобы было ясно, что она возвращает. SVZ>Иногда это, действительно, работает.
еще могут сказать что у них IDE и им плевать на тех, кто код ревьюит
V>>Сам ответь на вопрос, какой тип будет у переменной:
V>>auto var = func();
V>>
какой ???
SVZ>На это тебе сейчас возразят, что у func должно быть красноречивое название, чтобы было ясно, что она возвращает.
Тогда можно задать дополнительный вопрос — как правильно переименовать функцию getUserId() в красноречивое название, чтобы было ясно, что она возвращает?
А вообще auto — вещь очень полезная при рефакторинге. Тип поменялся, а код "выглядит как живой". Только чуть-чуть поменял и уже всё работает. Так что даже когда тип не очевиден, это не повод отказываться от auto.
Здравствуйте, Videoman, Вы писали:
S>>Если не указывать тип везде, где только возможно — использовать auto. Какие минусы? V>Сам ответь на вопрос, какой тип будет у переменной:
Здравствуйте, klopodav, Вы писали:
K>Тогда можно задать дополнительный вопрос — как правильно переименовать функцию getUserId() в красноречивое название, чтобы было ясно, что она возвращает?
Она возвращает User ID. Какой конкретно сейчас базовый тип у этого идентификатора — целое 32 бита (знаковое, беззнаковое?) или строчка (GUID, UUID, хэш в base64) или ещё что — не так уж и важно. Если это вдруг играет роль — надо пересмотреть логику в целом. Чем-то явно пахнет.
Здравствуйте, Shmj, Вы писали:
S>Если не указывать тип везде, где только возможно — использовать auto. Какие минусы?
Плюсы — чище и короче код, не требуеться гулять по коду поменяв тип данных возвращаемый функцией чтобы починить.
Минусы — нужен нормальный IDE, возможен мымрыц при автовыводе типа из константы и неочевидным округлением например, опасно баловаться рядом с ручной сериализацией
В таком норм, но ведь предполагается использовать auto абсолютно везде, во всех случаях. Если мы пишем код и помним контекст в голове всё кажется понятным. Если читать незнакомый код, то auto усложняет задачу понимания в разы. Плюс, автоматическая замена типа переменной на auto сделает почти любую программу, сложнее "hello word", некорректной, т.к. в С++ очень важны нюансы связанные с типами. Человеку который еще не знаком с кодом и хочет разобраться, важно понимать, что типы могут делать, а что нет. IDE помогает слабо, особенно в С++.
Какой, хотя бы из двух, overloads() вызовется здесь? А если я третий добавлю?
σ>А если бы было overloads(func())? 🤡
Я думаю, что это просто немного разные сценарии. По сложности разные. В последнем случае временный объект (ну или ссылка — не суть) создается для того, чтоб выполнить над ним ровно одно действие. Это действительно простой случай и без знания типа объекта, наверное, можно легко обойтись в большинстве случаев. В предыдущем же примере, как я понимаю, подразумевается, что над объектом могут выполняться какие-то еще другие действия, прежде чем он будет передан в функцию overloads. Вероятно также, что этот объект не будет единственным в этом фрагменте программы. То есть, предыдущй пример в целом сложнее и явное указание типов действительно облегчает чтение кода, тут я полностью согласен.
V> В таком норм, но ведь предполагается использовать auto абсолютно везде, во всех случаях. Если мы пишем код и помним контекст в голове всё кажется понятным. Если читать незнакомый код, то auto усложняет задачу понимания в разы. Плюс, автоматическая замена типа переменной на auto сделает почти любую программу, сложнее "hello word", некорректной, т.к. в С++ очень важны нюансы связанные с типами. Человеку который еще не знаком с кодом и хочет разобраться, важно понимать, что типы могут делать, а что нет. IDE помогает слабо, особенно в С++.
В целом согласен. Это вообще философия и субъективно. Кому-то "auto userId" хватает, а кому-то хочется знаать, что это тип uuid, а кому-то ещё и захочется узнать какой версии uuid. Можно и типы указывать и даже венгерскую нотацию, но всё равно можно написать так, что будет нихрена неясно даже с IDE
В общем, любую идею можно свести к абсурду. Так что топик в топку.
vsb>>var n = 1;
vsb>>var l = new ArrayList<String>();
vsb>>var person = personRepository.get(personId);
vsb>>
_>Ну не знаю. По мне так var безусловно уместен только во второй строчке.
Ну в первой будет int. Ладно, за С++ говорить не буду, там в этих целочисленных типах чёрт ногу сломит, в жаве в этом плане всё проще. В третьем будет тип Person. Предполагается, что человек, читающий код, хоть какое-то представление о структуре приложения имеет. Если там будет НЕ тип Person, тогда, конечно, надо указать (а может быть и переписать что-то).