验证应该在函数中完成还是在调用函数时完成?

Should validation be done in functions or when calling the function?

我正在 GUIDE 中制作 MATLAB GUI,需要验证我传递给多个函数的参数。

参数验证应该在 button/slider/edit 回调中完成还是在函数本身中完成?

在每个函数(回调函数或常规函数)中验证参数是可靠的——每当函数无法信任其输入时,我都会推荐它。由于检查参数类型、大小和值而导致的函数调用速度的最小化最终得到了回报,因为每个人都会理解函数需要什么。并且该功能可以独立于 GUI 重复使用。但有时它需要这样的东西:

if ~isnumeric(x) ...
|| ~isscalar(x)  ...
|| ~isfinite(x)  ...
|| (x <= 0)      ...
|| (x ~= fix(x))
        error('Positive finite integer value required.');
end

只有少数程序员看起来很漂亮。

另一方面,回调直接处理编辑字段,这意味着首先知道值可能有什么问题。如果用户不介意检查命令 window 中的错误消息,则不要测试回调中的值。另一方面,如果您想警告用户某个字段有误并需要编辑,您需要在转换它并将其作为参数发送给您的函数之前检查编辑字段值。

有人可能会说:为什么不只在回调函数中检查参数呢?一种可能的答案是因为回调只知道它的值。如果两个编辑框有一个最小值和一个最大值,每个编辑框都可以检查它自己的值(数字,标量,有限),但是最小值和最大值之间的必然关系(max ≥ min)只能测试这两个值被传递给将使用这些值的函数。