【问题标题】:Is passing a method (that returns a value) as a parameter a bad thing?将方法(返回值)作为参数传递是一件坏事吗?
【发布时间】:2012-05-28 07:05:27
【问题描述】:

例如,我有这个方法:LoadFunkyInfo(byval funkyData as string) 然后我将它传递给这样的东西:LoadFunkyInfo(giantTable.Rows.Item(0).Item("blahName"))。我应该这样做吗?

dim foo as string = giantTable.Rows.Item(0).Item("blahName")
LoadFunkyInfo(foo)

我很久以前在某处读到,最好将方法分配给变量并将该变量传递给方法,而不是将方法作为参数传递。这仍然是真的吗?还是完全正确?

注意:我使用的是 VB.Net 3.5

【问题讨论】:

    标签: .net vb.net methods parameters


    【解决方案1】:

    首先,您没有将方法作为参数传递。您将从方法返回的值作为参数传递。

    其次,这主要是可读性问题。我个人觉得在大多数情况下先将值赋给变量更易读。

    【讨论】:

    • 准确地说,可读性是这里的一个重要因素。不明白为什么没有人给你+1。固定:)
    • 我很确定我的标题已经说明了你在不知不觉中发现的,有必要强调的。不过还是谢谢你。
    【解决方案2】:

    执行后者(分配给临时变量)有助于调试。

    它允许您在分配上设置断点并查看结果。

    在使用某些优化标志(比如发布而不是调试)进行构建时,一些编译器会将带有临时变量的版本转换为没有的版本。

    传递的值不是方法——它是方法返回的值,就像临时变量一样——它被赋予返回的值,然后该值被传递on 作为参数。

    【讨论】:

      【解决方案3】:

      你不是在传递一个方法,你是在传递调用一个方法的结果。引入临时变量的唯一好处是帮助您调试:如果您在第二行设置断点,您将能够看到您传递给LoadFunkyInfo 的值。除此之外,这两个调用是相同的。

      【讨论】:

        【解决方案4】:

        我认为这主要取决于您是否要多次使用第一个函数返回的数据。例如,如果你有这样的事情:

        LoadFunkyInfo(giantTable.Rows.Item(0).Item("blahName"))
        LoadOtherFunkyInfo(giantTable.Rows.Item(0).Item("blahName"))
        

        那么最好把返回值保存起来,而不是调用两次方法:

        dim foo as string = giantTable.Rows.Item(0).Item("blahName")
        LoadFunkyInfo(foo)
        LoadOtherFunkyInfo(foo)
        

        否则不需要存储该值。

        【讨论】:

          【解决方案5】:

          这是一个品味问题,以及您认为最容易阅读的内容。编译成完全相同的代码。对于给出的示例,我不希望看到瞬态变量“foo”,并且通常定义变量只是为了在下一个语句中传递它们是不雅观的。但是,函数调用是否有很多参数,而参数是其他名称很长的函数,那么也很难阅读。

          我会说只有在消除代码中的歧义时才使用它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-08-18
            • 1970-01-01
            • 2018-08-02
            • 2015-12-29
            • 1970-01-01
            • 2010-11-16
            相关资源
            最近更新 更多