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

时间:2013-11-04 14:10:28

标签: c# java c++ templates generics

我发现自己有时会使用Java Generics编写看起来像这样的代码:

/**Class description
 *@param <K> Key to '.....'
 public class Mappy<K>{
   ///class methods, fields, etc....
 }

有时使用单字符名称导致速度减慢几个月后我回到代码并且必须继续向上滚动以记住什么是“T”&amp; “E”是。但最后我检查过,Oracle的官方指南是单字符名称,我从未见过java程序员没有这样做。

在C#中,使用TDescription是官方风格指南的一部分,类似于Google&amp;其他人使用Ixxxx进行接口。但我仍然在生产代码中看到一个字母的名字。 C#的API。我听说它在C ++中是类似的。在Haskell&amp; Ocaml,特别是Haskell,你在函数签名中使用'a'或'b'作为泛型参数(忘记编译器/解释器是否强制它或者它们可以是多个字母)。

我只是问这个'问题'看看你们是怎么做的:你在你的仿制品/模板/等等中坚持使用单字母名称吗?你有像Txxx这样的约定吗?给他们完整的名字(这会让同事感到困惑),还是你做其他事情?

这与Breaking java generics naming convention?(我通过谷歌发现)非常相似。我只想收集一些现代意见(看看在两年半的通行证中是否存在风格政变),而不是戳这个问题。

编辑1:

这个问题出现的原因可能是几天前我承诺抛弃变量'i'。太多次使用快速&amp;脏循环变量'i'导致嵌套循环中出现问题&amp;重构,所以我决定只使用完整的名字。

2 个答案:

答案 0 :(得分:3)

命名约定作为一种工具存在,可帮助您维护可读代码。

他们随时为您提供帮助。它们不是常规 有一个更高的值,易于阅读 - 可维护的代码,而不是盲目遵循命名约定。

答案 1 :(得分:1)

我的泛型中使用单字母大写类型,类型可以(几乎)任何类型。与Map<K,V>

一样

但是,当类型具有更多含义而不仅仅是任何类型时,例如:

public class Table<Column extends Enum<Column> & Table.Columns> {
 ...
 public interface Columns {
  ...

我使用更合适的名称Column但保留了初始大写的约定。我认为保持类型的简洁非常重要,因为您可能会在代码中多次使用它。单个大写字符是 - 你必须承认 - 完全简洁。