哪个标识符变量更适合作为参数传递给方法?

Posted

技术标签:

【中文标题】哪个标识符变量更适合作为参数传递给方法?【英文标题】:Which identifier variable is better to pass as an argument to a method? 【发布时间】:2011-07-18 07:52:56 【问题描述】:

假设如下方法:

public void ShareClassStuff(int shareClassId)

    var shareClass = _shareClassService.GetShareClassById(shareClassId);

    (if shareClass != null)
        var shareClassStat = _shareClassService.GetShareClassStat(shareClass.Id);

    //go on to do stuff with shareClass & shareClassStat 

在这里,我通过将 shareClassId 传递给返回我需要的对象的服务来获得 shareClass。接下来,我必须将一个 Id 传递给另一个方法以获取一些不同的数据。

我的问题是在第二次服务调用中,是否最好使用shareClassId 变量,例如

GetShareClassStat(shareClassId)

或 shareClass 对象的 Id 属性,例如

GetShareClassStat(shareClass.Id)

或者这有关系吗?

【问题讨论】:

【参考方案1】:

从性能的角度来看,我认为这并不重要,但是,我会将 shareClassId 传递给第二种方法,而不是 shareClass.Id。

原因是当您使用 shareClass.Id 时,您现在依赖于代码的定位。 _shareClassService.GetShareClassById 必须在 _shareClassService.GetShareClassStat 之前调用。此外,您还引入了对 _shareClassService.GetShareClassById 实现的依赖,以正确填充 Id 属性。

【讨论】:

【参考方案2】:

我认为这并不重要。

【讨论】:

【参考方案3】:

应该没关系。如果由于某种原因您的 GetShareClassById() 方法停止返回空值而是开始返回一个空类,这只会在以后发生。现在你有一个带有无效 id 的类。并不是说它会发生,只是说它会引起问题。

如果您希望获得 0.0001 秒的速度,请传递该变量。

【讨论】:

【参考方案4】:

虽然一个人可能会同时争辩,但传递shareClassId 的好处非常小:

shareClass.Id 是一个属性,因此是一个方法调用(可能会或可能不会通过优化内联)。 shareClassId 是一个简单的整数。

所以传递参数有一个很小的优势。

更新

人们可能更喜欢使用该参数还有另一个原因:它是一致的。您在第一次“按 ID 查找”时使用了该参数,因此第二次再次使用该参数。

这些理由都​​不是非常有说服力,但既然你问了,我假设你对任何可以想象的推理感兴趣。

【讨论】:

我认为可以安全地假设如果 shareClass 本身被传递,则仍需要在被调用的方法中评估该属性。 @Jon:问题是:我应该传递我已经拥有并且知​​道与我使用该 ID 检索的对象的 Id 属性相同的值,还是应该转身使用物业?很明显,GetShareClassStat 方法只是另一种从 Id 返回对象的查找方法。虽然您的答案很有用,但它似乎不适用于这种情况。 我想我们需要知道更多才能确定。我想说,如果你是对的,我的回答 is 很有用,应该让 OP 只传递 ID - 因为这就是它在逻辑上应该依赖的全部。 @Jon:但是 OP 会留下同样的问题:我应该如何只传递 ID? localVariableWithTheIdsomeObject.TheIdFromTheProperty? @Martinho:啊。我很可能完全误解了这个问题。哎呀。我认为问题在于该方法是否应该只采用一个 ID,或者是对整个对象的引用。将删除我完全不正确的答案...

以上是关于哪个标识符变量更适合作为参数传递给方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 IPython 变量作为参数传递给 bash 命令

将实例变量作为参数传递给同一类中的方法?

如何将变量作为 cURL 数组中的 url 参数传递给 CURLOPT_URL

为啥我们将字符串数组作为参数传递给 main() 方法,为啥不传递任何集合类型或包装类型或原始类型?

将大量参数传递给 Python 函数的方法

如何将 JavaScript 变量作为参数传递给 JSF 操作方法?