一般编程 - 调用非void方法但不使用值

时间:2009-08-05 05:02:50

标签: methods return-value call void

这是一般编程,但如果它有所不同,我使用的是objective-c。假设有一个方法返回一个值,并且还执行一些操作,但是你不关心它返回的值,只关心它所做的事情。你会把这个方法称为无效吗?或者将结果放在变量中,然后删除它或忘记它?陈述你的意见,如果遇到这种情况你会怎么做。

6 个答案:

答案 0 :(得分:4)

一个常见的例子是printf,它返回一个int ...但你很少看到这个:

int val = printf("Hello World");

答案 1 :(得分:3)

是的,只是将方法称为无效。你可能总是这样做而没有注意到它。赋值运算符'='实际上返回一个值,但它很少使用。

答案 2 :(得分:2)

这取决于环境(语言,工具,编码标准......)。

例如在C中,完全可以在不使用其值的情况下调用函数。有些函数如printf,它返回一个int,它一直都在完成。

有时不使用值会导致警告,这是不可取的。将值分配给变量然后不使用它只会导致有关未使用变量的另一个警告。对于这种情况,解决方案是通过在调用前加上(void),例如

,将结果转换为void
(void) my_function_returning_a_value_i_want_to_ignore().

答案 3 :(得分:1)

这里有两个不同的问题,实际上是:

  1. 你应该关心返回价值吗?
  2. 您应该将它分配给您不会使用的变量吗?
  3. 对#2的回答是响亮的“不” - 当然,除非你正在使用一种非法的语言(早期的Turbo Pascal浮现在脑海中)。定义一个变量只是为了抛弃变量,这绝对没有意义。

    第一部分并不那么容易。通常,返回一个原因值 - 对于idempotent函数,结果是函数的唯一目的;对于非幂等,它通常代表某种返回代码,表示操作是否正常完成。当然也有例外 - 例如method chaining

答案 4 :(得分:0)

如果这在.Net(例如)中很常见,那么代码可能会出现问题CQS

当我调用一个返回我忽略的值的函数时,通常是因为我在测试中这样做来验证行为。这是C#中的一个例子:

    [Fact]
    public void StatService_should_call_StatValueRepository_for_GetPercentageValues()
    {
        var statValueRepository = new Mock<IStatValueRepository>();

        new StatService(null, statValueRepository.Object).GetValuesOf<PercentageStatValue>();

        statValueRepository.Verify(x => x.GetStatValues());
    }

我并不关心返回类型,我只想验证是否在假对象上调用了一个方法。

答案 5 :(得分:0)

在C中它很常见,但有些地方可以这样做,而其他地方则不是这样。更高版本的GCC有function attribute,因此您可以在使用函数时收到警告而不检查返回值:

  

如果具有此属性的函数的调用者不使用其返回值,则warn_unused_result属性会导致发出警告。这对于不检查结果是安全问题还是总是错误的函数很有用,例如realloc。

     int fn () __attribute__ ((warn_unused_result));
     int foo ()
     {
       if (fn () < 0) return -1;
       fn ();
       return 0;
     }
     

在第5行发出警告。

上次我使用它时无法关闭生成的警告,这会在您编译不想修改的第三方代码时导致问题。此外,当然没有办法检查用户是否确实对返回的值做了明智的事情。