Language agnostic 编程风格:您应该检查函数中的null还是函数外的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(); 或 或 我可以理解为什么在函数中设置空检查是好的,因为这样你就不必到处检查,但有时你需要在调用函数之前检查,所以检查两次会觉得多余 有人能解释一下吗?我认为这取决于代码的预期用途和/或分发。这确实是基于观点,但我同
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();
}