我承认这个问题是主观的,但我对社区的观点感兴趣。我有一个缓存类,它接受类型为Func<TResult>
的缓存加载器函数,它用于从数据库中检索值并将其存储在缓存中。
public static class Cache
{
public TResult Get<TResult>(string cacheKey, Func<TResult> cacheLoader)
{
// Implementation
}
}
我的问题是:我应该如何命名函数参数?
cacheLoader
?loadResult
?cacheLoadFunction
? (我不喜欢这个。)我对这个特定函数参数的名称不太感兴趣,而且对如何命名函数参数更感兴趣。什么说你,Stack Overflow社区?
答案 0 :(得分:22)
在框架中使用名词有先例,例如
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);
名词通常是an agentive suffix的适当动词。
在您的示例中,我会使用loader
或valueFactory
之类的内容。我个人不喜欢cacheLoader
,因为可能是调用者而不是代理人在缓存中插入工作。
答案 1 :(得分:6)
我喜欢将其命名为方法,以便在调用它时,如下所示:
loadResult(result);
它看起来像一个普通的方法调用,但是外壳表明它是一个变量,因此传递了两条信息。
您可以添加Method
或Delegate
或Lambda
这样的后缀,但这些后缀通常只会使其变得冗长而不会增加清晰度。它可能取决于情况和您的编码标准,当然还有您的偏好。
答案 2 :(得分:2)
我通常在命名中使用委托工作,以明确该参数正在接收委托。例如,我可能会将上述名称命名为:
public static class Cache
{
public TResult Get<TResult>(string cacheKey, Func<TResult> cacheLoadingDelegate)
{
// Implementation
}
}
我这样做是为了避免与问题中建议的命名混淆。 cacheLoader
听起来太像一个对象,而loadResult
就像一个对象/类型(结果本身)。我个人也不喜欢使用function
或method
,因为委托实际上不是一个函数,而是一个委托 - 一个引用函数的类型。