【问题标题】:Programming style: Should you check for null in functions or out of functions?编程风格:您应该检查函数中的空值还是函数外的值?
【发布时间】:2014-12-19 13:08:52
【问题描述】:

当你用一个对象调用一个函数时,你应该在调用函数之前检查函数中的 null 还是两者都检查?什么是更好的编程实践?

类似的东西

Test a = getTest();

if (a != null) {
    myFunc(a);
}

def myFunc(x):
    print x.val();

Test a = new Test();

myFunc(a);

def myFunc(x):
    if (x != null) {
        print x.val();
    }

Test a = new Test();

if (a != null) {
    myFunc(a);
}

def myFunc(x):
    if (x != null) {
        print x.val();
    } 

我明白为什么在函数中进行空检查是好的,因为你不必到处检查,但有时你需要在调用函数之前检查,所以检查两次感觉很多余......

谁能解释一下?

【问题讨论】:

  • 如果你想融入生态系统,做你标准库函数做的事情。 printf 是否检查空格式字符串? strcpy 是否检查空源或目标? fwrite 是否检查空文件指针或缓冲区?如果他们这样做,你也应该这样做。

标签: language-agnostic


【解决方案1】:

我认为这取决于代码的预期用途和/或分发。这确实是基于意见,但我同意鲍勃叔叔关于“防御性编程”的意见。如果它是供您或您的团队使用的库,您应该避免防御性编程,毕竟您相信您的同事不会将 null 传递给函数对吗?

如果您正在编写可供任何人使用的公共 API,则应进行适当的检查,尤其是在传递 null 可能导致崩溃的情况下。

非公共 API 中的防御性编程是一种气味,也是一种症状, 不做 TDD 的团队。

@unclebobmartin

【讨论】:

  • 断言也有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多