Какое предпочтительное соглашение об именах для параметров метода Func <TResult>?
Я признаю, что этот вопрос субъективен, но меня интересует мнение сообщества. У меня есть класс кеша, который выполняет функцию загрузчика кеша типа Func<TResult>
, которую он использует для извлечения значения из базы данных и хранения его в кеше.
public static class Cache
{
public TResult Get<TResult>(string cacheKey, Func<TResult> cacheLoader)
{
// Implementation
}
}
Мой вопрос: Как мне назвать параметр функции?
- Должен ли я назвать его как объект, например?
cacheLoader
?
- Должен ли я назвать его как метод, например.
loadResult
?
- Должен ли я явно ссылаться на него как на функцию, например?
cacheLoadFunction
? (Мне это не нравится.)
Меня меньше интересует то, что я должен назвать этим конкретным параметром функции, и больше интересуюсь тем, как вы называете параметры функции в целом. Что скажете, сообщество?
Ответы
Ответ 1
Есть прецеденты для использования существительного в Framework, например.
Enumerable.Average<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> selector)
Enumerable.Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
Enumerable.GroupBy<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector)
ConcurrentDictionary<TKey,TValue>.GetOrAdd(TKey key,
Func<TKey, TValue> valueFactory);
Существительное часто является подходящим глаголом с агентом суффикса.
В вашем примере я бы использовал что-то вроде loader
или, возможно, valueFactory
. Мне лично не нравится cacheLoader
, потому что предположительно это вызывающий, а не делегат, который выполняет работу по вставке в кеш.
Ответ 2
Мне нравится называть его как метод, поэтому при его вызове, например:
loadResult(result);
он выглядит как обычный вызов метода, но корпус указывает, что он является переменной, поэтому передаются обе части информации.
Вы можете добавить суффикс типа Method
или Delegate
или Lambda
, но они часто просто делают его подробным без добавления ясности. Это может зависеть от ситуации и ваших стандартов кодирования, и, конечно, ваших предпочтений.
Ответ 3
Обычно я использую делегат работы в своем наименовании, чтобы было очевидно, что этот параметр получает делегат. Например, я бы назвал это выше:
public static class Cache
{
public TResult Get<TResult>(string cacheKey, Func<TResult> cacheLoadingDelegate)
{
// Implementation
}
}
Я делаю это специально, чтобы избежать путаницы из предложенного наименования в вопросе. cacheLoader
звучит слишком сильно, как объект, и loadResult
как объект/тип (сам результат). Мне также лично не нравится использовать function
или method
, поскольку делегат на самом деле не является функцией, а скорее делегатом - типом, который ссылается на функцию.