Soru Func yöntem parametreleri için tercih edilen adlandırma kuralı nedir?


Bu sorunun öznel olduğunu itiraf ediyorum ama topluluğun görüşüyle ​​ilgileniyorum. Önbellek yükleyici işlevi türünü alan bir önbellek sınıfım var. Func<TResult>Veritabanından bir değer almak ve önbellekte saklamak için kullanır.

public static class Cache
{
    public TResult Get<TResult>(string cacheKey, Func<TResult> cacheLoader) 
    {
        // Implementation
    }
}

Sorum şu: İşlev parametresini nasıl adlandırmalıyım?

  • Bunu bir nesne gibi adlandırmalıyım, ör. cacheLoader?
  • Bir yöntem gibi adlandırmalıyım, ör. loadResult?
  • Açıkça bir işlev olarak belirtmeliyim, ör. cacheLoadFunction? (Bunu sevmiyorum.)

Adını vermem gereken şeyle daha az ilgileniyorum bu özel fonksiyon parametresi ve genel olarak fonksiyon parametrelerini nasıl adlandırdığınız ile daha fazla ilgilenir. Ne diyorsun, Stack Overflow topluluğu?


20
2018-05-19 16:04


Menşei


Bu bir işlevdir, böylece başka bir işlev gibi adlandırırsınız. - codymanix
@codymanix, aynı zamanda, sorunları daha da kötüleştiren bir değişkendir;) Joe'nun cevabını tercih ederim. - nawfal


Cevaplar:


Çerçevede bir isim kullanmanın emsalleri vardır, ör.

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);

İsim genellikle uygun bir fiildir bir ajan eki.

Örneğiniz gibi bir şey kullanırdım loader veya muhtemelen valueFactory. Ben şahsen beğenmiyorum cacheLoader çünkü muhtemelen önbellekte yerleştirme işini yapan temsilci yerine arayan kişidir.


21
2018-05-19 17:15



Reed'in bir metot gibi isimlendirmesi fikrini sevdiğim halde, daha doğal göründüğüne göre, çerçeve emsali benim fikrime göre kozdur. - John Bledsoe


Bunu bir yöntem gibi adlandırmak isterim, böylece bunu çağırdığınızda, bunun gibi:

loadResult(result);

sıradan bir yöntem çağrısı gibi görünüyor, ancak kasa bir değişken olduğunu gösteriyor, böylece her iki bilgi de aktarılıyor.

Gibi bir son ekleyebilirsin Method veya Delegate veya Lambda Ancak bunlar genellikle netlik katmaksızın onu netleştiriyorlar. Durum ve kodlama standartlarınıza ve elbette tercihinize bağlı olabilir.


6
2018-05-19 16:08



Bu mantığı seviyorum, bir şey hariç. Argüman isminin amacı, yöntemin uygulayıcısı için değil, arayan kişiye açık hale getirmek için seçilmelidir. - Reed Copsey
@Reed: Haklısınız, bu arayanın lehine tartışan bir çıkar çatışması. Bir kütüphane bir kamu API'sini ortaya çıkarırsa, parametrelerin isimlendirilmesi kutsaldır. Bu kodlama standartlarına bir örnektir. - Rick Sladkey
Evet, parametre isminin arayana iletmesi gerektiği gibi görünüyor "bunu yapacak bir yöntemden geçmek". Arayanın yöntemi uygulayıp uygulamadığı ya da bir tane bulup bulmadığı, ne yapması gerektiğini bilmek zorundadır. - John Bledsoe


Ben genellikle işe yararlanıyorum temsilci Benim ismimde, bu parametrenin bir delege aldığını açıkça göstermek için. Örneğin, yukarıdakileri potansiyel olarak adlandırırdım:

public static class Cache
{
    public TResult Get<TResult>(string cacheKey, Func<TResult> cacheLoadingDelegate) 
    {
        // Implementation
    }
}

Bu konuda özellikle önerilen isimlendirmeden gelen karışıklığı önlemek için bunu yapıyorum. cacheLoader bir nesne gibi çok fazla ve loadResult bir nesne / tür gibi (sonucun kendisi). Ben de kişisel kullanmayı sevmiyorum function veya methodBir temsilci aslında bir işlev değil, bir temsilci - bir işleve başvuran bir türdür.


2
2018-05-19 16:06



Cevap İşte MS bu sözleşmeye karşı olduğunu söylüyor. - nawfal