Мне всегда трудно понять, стоит ли мне называть определенный метод, начиная с « getSomething
против» findSomething
.
Проблема заключается в создании помощников для плохо разработанных API. Это обычно происходит при получении данных от объекта, который требует объекта в качестве параметра. Вот простой пример:
public String getRevision(Item item) {
service.load(item, "revision");
// there is usually more work to do before getting the data..
try {
return item.get_revision();
}
catch(NotLoadedException exception) {
log.error("Property named 'property_name' was not loaded", exception);
}
return null;
}
Как и зачем выбирать между именованием этого метода как getRevision()
или findRevision()
?
Ответы:
Я использую,
Get
когда знаю, что время поиска будет очень коротким (как при поиске из хеш-таблицы или btree).Find
подразумевает процесс поиска или вычислительный алгоритм, который требует «более длительного» периода времени для выполнения (для некоторого произвольного значения более длинного).источник
find
алгоритм хэш-таблицы позже?get
и другоеfind
будет применяться в зависимости от того, как оно используется.Я бы сказал, что
find
может потерпеть неудачу, ноget
не должен.источник
find
можете вернуть NULL, аget
никогда не вернет NULL, но могут выбросить (или утверждать), я согласен.find()
возвращаетсяOptional<>
? В этом случаеfind
такжеnull
безопасно.Процитирую разговор, который я часто имею со своими детьми:
Та же идея имеет место:
используйте «get» для метода, который возвращает дешевую доступную часть информации (и, вероятно, может быть встроенной или иным образом оптимизированной), или для части информации, уникально принадлежащей этому объекту.
используйте «find» для метода, который работает, чтобы получить часть информации, или использует другие объекты, чтобы найти ее.
источник
Поиск подразумевает отсутствие результата, например, при выполнении запроса к базе данных с некоторыми параметрами, которые могут изменяться между вызовами. Get, с другой стороны, подразумевает, что результаты известны методу заранее или не изменятся после того, как станут известны, что в вызове нет параметров.
Итак, я бы использовал, например, Customer findCustomerById (long customerId) и Customer getCustomer ()
источник
Я применяю следующий шаблон:
Foo GetFoo()
не может вернуть ноль, и его сложность равна O (log (n)) или меньшеbool TryGetFoo(out Foo)
может вернуть ноль, и его сложность равна O (log (n)) или меньшеFoo FindFoo()
не может вернуть ноль, и его сложность больше, чем O (log (n))bool TryFindFoo(out Foo)
может вернуть ноль, и его сложность больше, чем O (log (n))Таким образом, код достаточно ясен в отношении намерений и сложности, которую вы можете ожидать.
Как правило, геттеры предназначены для прямого доступа к списку или словарю / набору.
Искатели - это глубокий поиск, полное сканирование списка и т. Д.
В твоем случае:
источник
try
, коротко и точноget
уместно в любом случае _ на самом деле часто предполагается, что для того, чтобы получить что-то, нужно сначала найти это. Так что, если вы не уверены, используйтеget
.Я бы использовал
find
такие методы, какfindMinimum()
илиfindOptimal()
, т. Е. Где есть какой-то особый алгоритм, который вычисляет возвращаемое значение, а не просто делает запрос к БД, файловой системе, удаленному серверу и т. Д. Для получения некоторых данных.источник
find
префикс в приведенных вами примерах. Для вычислительных задач, таких как те, что в вашем примере, я бы использовалcalculate
илиcompute
.Не используйте префиксы find или get. Это нарушение UniformAccessPrinciple, придуманное Бертраном Мейером. Почему бы не создать метод, подобный следующему:
источник
Обычно я буду использовать
Get
для получения объекта / значения иFind
для определения его местоположения (например, в массиве).Например:
источник
Для меня это
find
означает, что может быть более одного результата.get
подразумевает только одно.источник
getCat
противfindCat
противgetCats
противfindCats
.find..
По- прежнему представляет собой особые объекты возвращаются. Множественное число должно быть добавлено к существительному, по моему мнению.