Skip to content

MATLAB - Return 语句

在 MATLAB 中,return 语句提供了一种机制,可以提前终止函数或脚本的执行,并将控制权返回给调用函数或命令窗口。它是一种控制流语句,而不是值传递机制。

理解 MATLAB 函数是根据其定义返回值的,而不是明确地因为 return 关键字,这一点至关重要。函数在执行到达 end 语句时返回其值。

function output = myFunc(input)
% 在此处进行计算
output = input * 2;
% 函数结束时,'output' 的值被返回。
end % 执行结束,控制权返回给调用者

return 语句的主要目的是提前退出函数,通常是在条件块内部。

function [out1, out2] = functionName(in1, in2)
% 函数体
if (some_condition)
% 需要提前退出
return;
end
% 如果条件为假,此处有更多代码
out1 = ...;
out2 = ...;
end

当 return 执行时,函数会立即停止。return 语句之后函数中的任何代码都不会被执行。函数将返回此时输出参数的当前值。

示例 1:使用守护子句进行输入验证

Section titled “示例 1:使用守护子句进行输入验证”

return 的一个常见且出色的用法是在函数开头验证输入。这被称为“守护子句”(guard clause)。

function result = calculateRatio(x, y)
% 守护子句:检查无效输入 'y'
if y == 0
warning('Division by zero is not possible. Returning NaN.');
result = NaN; % 赋值一个占位符
return; % 立即退出函数
end
% 仅当守护子句通过时才执行此代码
disp('Calculation proceeding...');
result = x / y;
end

让我们从命令窗口调用此函数:

val1 = calculateRatio(10, 2)
Calculation proceeding...
val1 =
5
val2 = calculateRatio(10, 0)
Warning: Division by zero is not possible. Returning NaN.
val2 =
NaN

注意在第二次调用中,disp('Calculation proceeding...') 这行代码是如何被跳过的。

如果一个函数需要返回多个值,它们应该在提前调用 return 之前被赋值。

function [stats, success] = processData(data)
% 检查输入数据是否为空
if isempty(data)
disp('Input data is empty. Cannot compute stats.');
stats = struct(); % 返回一个空结构体
success = false; % 指示失败
return; % 提前退出
end
% 如果数据有效,计算统计信息
stats.mean = mean(data);
stats.std_dev = std(data);
stats.min = min(data);
stats.max = max(data);
success = true;
end

在命令窗口中执行演示了控制流:

sampleData = [1, 5, 2, 8, 4];
[s, ok] = processData(sampleData)
s =
struct with fields:
mean: 4
std_dev: 2.7386
min: 1
max: 8
ok =
logical
1
[s_empty, ok_empty] = processData([])
Input data is empty. Cannot compute stats.
s_empty =
struct with no fields.
ok_empty =
logical
0
  • 务必将 return 用于守护子句:在函数开头检查输入可以使您的代码更清晰、更鲁棒,而不是将主要逻辑嵌套在一个大型 if-else 块中。
  • 不要在末尾放置 return:在 end 关键字之前放置 return 语句是多余的,会增加冗余。函数无论如何都会返回。
  • 初始化输出参数:如果存在提前退出的可能性,最佳实践是初始化您的输出参数为默认值或错误状态值(例如,NaN、false、[])。这确保函数始终返回预期类型的值。
  • return 与 error 的对比:如果某个输入使得函数无法继续执行,通常最好使用 error('描述性消息') 函数抛出错误。这会完全停止执行,并且比返回调用代码需要检查的特殊值更清晰。