1

我在 matlab 中编写了一个简单的标签管理器类,我正在努力(或者可能是过度思考 ;-) 适当地命名我的类方法。该类称为tag_manager. 这是我关于清晰的 API 和实现的问题:

  • 要添加标签,我应该调用该方法add还是add_tag?删除也是如此。
  • 要重命名标签,我应该调用该方法rename_tag还是rename

我总是想添加_tag后缀,以便清楚方法的作用。

  • nbr_tags是一个计数器,用于跟踪当前存储的标签数量。我有时需要访问这个数字,所以我没有通过标签列表计算条目数,而是想通过类方法返回这个值。是return_nbr_tags要走的路,还是可以更简洁地命名?
  • 很多时候,我需要知道标签的索引,这反过来又被用来在其他矩阵中查找一些元素。为了防止代码过长,我把这个方法简单地inx()称为return_tag_index. 我知道今天我确实知道inx()代表什么,但两周后我可能会记不住。那么命名这些方法的最佳方式是什么?

这是类定义:

properties (SetAccess = private, GetAccess = public)
    tag_names = {}; % store the tags
    tag_rel_indx = []; % the relative tag index
    tag_abs_indx = []; % the absolute tag index
end

properties (SetAccess = private, GetAccess = public, Hidden = true)
    nbr_tags = 0;
    abs_tag_counter = 0;
end

methods
    % add single tag to list. should be 'add' or 'add_tag'?
    function obj = add_tag(obj, name)
    end

    % remove single tag from list
    function obj = remove_tag(obj, name)
    end

    % short-cut for 'return_tag_index'
    function indx = inx(obj, name)
        indx = return_tag_index(obj, name);
    end

    % rename tag
    function obj = rename_tag(obj, old_name, new_name)
    end

    % re-order tags by name
    function obj = reorder_by_name(obj)
    end

    % return number of tags stored in tagmanager
    function nbr_tags = return_nbr_tags(obj)
        nbr_tags = obj.nbr_tags;
    end

end

非常感谢!

4

2 回答 2

1

在我看来,并且之前不得不使用其他人的代码,我发现当方法/函数名称清晰且具有描述性时非常有帮助。我宁愿有人对他们的函数名称冗长,但同时你又不想对它过于冗长。

例如,您的标签数量返回功能。我个人会这样命名GetNumberOfTags。对于我用来设置特定值的函数,我使用SetParticularValue.

不过,我确实远离下划线。这可能只是我从工作中的编码实践中养成的习惯。

要记住的最重要的事情是在整个课堂上保持一致。如果函数不完全清楚,不要忘记提供有用的注释 =P 当你必须返回并重新编写某人的代码并且关于正在使用的变量和函数的内容的信息真的很脏时,这太可怕了真的是为了做;)。

于 2012-08-09T11:54:40.520 回答
1

在使用高度明确的函数名称(这对理解代码非常有帮助)和创建易于开发和使用的代码之间总是需要权衡取舍。如果您需要为方法创建快捷方式名称,这表明您已经向显式函数名称迈进了一步。

在您的情况下,由于您正在创建标签管理器,所以我会tag从方法中删除,而是开始将标签管理器类实例化为 的约定tags = tagManager;,这样添加标签的方法就可以写成tags.add(...)add(tags,...)。但是,当您添加标签以外的其他内容时,添加更明确的方法名称会有所帮助,例如tags.addGroup. 然后你的索引方法就变成index(tags,name)了,在我看来,它既简短又清晰。

PS:为什么要有returnNumberOfTags方法?您可以从属性中读取,并在必要时添加 set/get 方法。

于 2012-08-09T12:27:43.257 回答