C# 泛型/模板中的长(可读)名称

C# 泛型/模板中的长(可读)名称,c#,java,c++,templates,generics,C#,Java,C++,Templates,Generics,我发现自己有时会用Java泛型编写如下代码: /**Class description *@param <K> Key to '.....' public class Mappy<K>{ ///class methods, fields, etc.... } /**类说明 *@“…”的参数键 公共类Mappy{ ///类方法、字段等。。。。 } 有时使用单字符名称会导致速度变慢,几个月后我回到代码中,不得不不断向上滚动以记住“T”和“E”是什么。但我最后检

我发现自己有时会用Java泛型编写如下代码:

/**Class description
 *@param <K> Key to '.....'
 public class Mappy<K>{
   ///class methods, fields, etc....
 }
/**类说明
*@“…”的参数键
公共类Mappy{
///类方法、字段等。。。。
}
有时使用单字符名称会导致速度变慢,几个月后我回到代码中,不得不不断向上滚动以记住“T”和“E”是什么。但我最后检查了一下,Oracle的官方指南是单字符名称,我从未见过java程序员不这样做

在C#中,使用TDDescription是官方风格指南的一部分,类似于Google和其他公司使用Ixxxx进行接口的方式。但我仍然在C#的生产代码和API中看到一个字母名称。我听说它在C++中是相似的。在Haskell&Ocaml中,尤其是在Haskell中,您可以在函数签名中使用“a”或“b”作为泛型参数(忘记编译器/解释器是否强制这样做,或者它们是否可以是多字母的)

我只是想问一个“问题”,看看你们是怎么做的:你们在泛型/模板等中是否坚持使用单字母名称,你们是否有像TXX这样的约定,你们是否给他们起了完整的名字(这会让同事们感到困惑),还是做了其他事情

这与(我通过谷歌找到的)非常相似。我不想提出这个问题,我只是想收集一些现代的观点(看看在过去的两年半里是否有过一场风格上的政变)

编辑1:


可能出现这个问题的原因是,几天前我承诺转储变量“I”。太多次使用quick&dirty循环变量“i”导致嵌套循环和重构出现问题,因此我决定只使用完整的名称。

命名约定是一种帮助您维护可读代码的工具

他们在那里帮助你。它们不是规则。

与盲目遵循命名约定相比,拥有易于阅读和维护的代码具有更高的价值。

当类型可以(几乎)是任何类型时,我在泛型中使用单字母大写类型。与
Map
等类似

但是,当类型的含义大于任何类型时,例如:

public class Table<Column extends Enum<Column> & Table.Columns> {
 ...
 public interface Columns {
  ...
公共类表{
...
公共接口列{
...

我使用了一个更合适的名称
,但保留了大写字母的惯例。我觉得保持类型的简洁性很重要,因为您可能会在代码中多次使用它。一个大写字符是-您必须承认-完美的简洁性。

我想说,如果单个字母名称变得太混乱,可能意味着整个类有点太混乱了。我不能说是行业公认的标准,但从我个人的使用情况来看,如果我的泛型类只有一个泛型参数,并且它背后没有真正的意义(例如,
列表
)然后我只使用
T
。但是,如果我的类有两个或更多的参数,或者它们有一些特殊的命名含义,那么我会给它们一个名称,比如
TDescription
,或者对于键/值对,可能是
TKey
TValue
。在过去,我曾尝试删除描述性类型的
T
前缀,但我发现了它只是让我感到困惑,使我的第一本能阅读代码来考虑它是一种定义类型。通常,除了做一些高级的元编程之外,泛型将有相对较少的参数来跟踪。<代码> t>代码>对于一个“类型”的实例来说是常见的。,而
N
对于基于大小的值是常见的。实际上没有必要将
template
更改为
template
@Kayaman,我通常处理50-300个类的中型项目。假设每七个类都是泛型,但泛型往往与其他泛型一起存在于包中(比如说MVC中的实用程序包或控制器包)。我可能正在一个包(或五到八个包中的四十个包)中处理和浏览十个类,几个月前我或其他人决定命名所有通用参数T、E和S。因此单独一个类很简单,但宏图片有点模糊。