Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 编程风格:您应该检查函数中的null还是函数外的null?_Language Agnostic - Fatal编程技术网

Language agnostic 编程风格:您应该检查函数中的null还是函数外的null?

Language agnostic 编程风格:您应该检查函数中的null还是函数外的null?,language-agnostic,Language Agnostic,当使用对象调用函数时,在调用函数或两者之前,是否应检查函数中的null?什么是更好的编程实践 像这样的 Test a = getTest(); if (a != null) { myFunc(a); } def myFunc(x): print x.val(); 或 或 我可以理解为什么在函数中设置空检查是好的,因为这样你就不必到处检查,但有时你需要在调用函数之前检查,所以检查两次会觉得多余 有人能解释一下吗?我认为这取决于代码的预期用途和/或分发。这确实是基于观点,但我同

当使用对象调用函数时,在调用函数或两者之前,是否应检查函数中的null?什么是更好的编程实践

像这样的

Test a = getTest();

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

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

我可以理解为什么在函数中设置空检查是好的,因为这样你就不必到处检查,但有时你需要在调用函数之前检查,所以检查两次会觉得多余


有人能解释一下吗?

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

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

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


@unclebobmartin

断言也有帮助。如果您想融入生态系统,请执行标准库函数所做的操作。
printf
是否检查空格式字符串?
strcpy
是否检查空源或目标?
fwrite
是否检查空文件指针或缓冲区?如果他们这样做了,你也应该这样做。
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();
    }