Oop 以一致和精确的方式命名类方法

Oop 以一致和精确的方式命名类方法,oop,matlab,Oop,Matlab,我在matlab中编写了一个简单的标记管理器类,我正在努力(或者可能在思考;-)恰当地命名我的类方法。该类称为tag\u manager。以下是我关于清晰API和实现的问题: 要添加标记,我应该调用方法add还是add\u tag?移除也一样 要重命名标记,我应该调用方法rename\u tag还是rename 我总是想添加\u标记后缀,这样就可以清楚地了解方法的作用 nbr_标签是一个计数器,用于跟踪当前存储的标签数量。有时我需要访问这个数字,因此我不想查看标签列表并计算条目的数量,而是

我在matlab中编写了一个简单的标记管理器类,我正在努力(或者可能在思考;-)恰当地命名我的类方法。该类称为
tag\u manager
。以下是我关于清晰API和实现的问题:

  • 要添加标记,我应该调用方法
    add
    还是
    add\u tag
    ?移除也一样
  • 要重命名标记,我应该调用方法
    rename\u tag
    还是
    rename
我总是想添加
\u标记
后缀,这样就可以清楚地了解方法的作用

  • nbr_标签
    是一个计数器,用于跟踪当前存储的标签数量。有时我需要访问这个数字,因此我不想查看标签列表并计算条目的数量,而是想通过类方法返回这个值。
    return\u nbr\u tags
  • 通常,我需要知道标记的索引,它反过来用于查找其他矩阵中的某些元素。为了防止代码变得太长,我简单地将此方法称为
    inx()
    ,它应该是
    return\u tag\u 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

非常感谢

在我看来,而且之前也不得不使用其他人的代码,当方法/函数名称清晰且具有描述性时,我发现它非常有用。我更希望有人对他们的函数名长篇大论,但同时你也不希望对它过于长篇大论

例如,返回标记数函数。我个人会将其命名为
GetNumberOfTags
。对于用于设置特定值的函数,我使用
setSpecificularValue

不过,我确实避开了下划线。这可能只是我从工作中的编码实践中养成的一个习惯


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

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

在您的例子中,因为您正在创建一个标记管理器,所以我将从方法中删除
tag
,并开始将您的标记管理器类实例化为
tags=tagManager
,这样添加标记的方法可以编写为
tags.add(…)
add(tags…)
。但是,当您添加标记以外的内容时,添加更明确的方法名称会有所帮助,例如
tags.addGroup
。然后,您的索引方法变成了
索引(标签、名称)
,在我看来,它既短又清晰


PS:为什么要使用
returnNumberOfTags
方法?您只需读取属性,并在必要时添加set/get方法。

非常感谢!我当然可以直接访问
nbr\u标签
,但我不希望用户修改它的值,因此它是一个私有的隐藏属性。这就是为什么我觉得需要为它提供一个可见的API,即使用
Get
Return
方法。@memyself:setAccess设置为private时,不必隐藏属性。但这确实是一个风格问题。理查德·约翰逊(Richard Johnson)有一本优秀的Matlab风格指南