MATLAB - 无返回值函数
MATLAB - 具有副作用的函数
Section titled “MATLAB - 具有副作用的函数”在许多编程语言中,“void 函数”指的是不返回值的函数。在 MATLAB 中,每个函数都可以返回输出参数,但它们并非必须如此。不返回任何值,而是设计为执行某个动作的函数,被称为具有副作用(Side Effects)的函数。我们可以将这些函数视为“过程式”或“类似 void”的函数。
此类函数的主要目的是与函数本身之外的环境交互,例如:
- 显示信息:将文本或结果打印到命令行窗口(Command Window)。
- 创建可视化:生成图(Plots)或图形(Figures)。
- 文件输入/输出(File I/O):将数据保存到文件或从文件读取。
- 修改状态:更改句柄对象(Handle Object)的属性(一个高级话题)。
创建过程式函数
Section titled “创建过程式函数”语法与常规函数相同,但您只需省略输出参数和函数定义中的 []= 部分。
function functionName(inputArg1, inputArg2, ...) % 此函数执行一个动作但不返回值。
% -- 函数体在此处 --
end % 未定义输出参数最佳实践:函数名称应为动词,清晰地描述其动作,例如 plotData、saveResults 或 printSummary。
过程式函数示例
Section titled “过程式函数示例”示例 1:显示格式化消息的函数
Section titled “示例 1:显示格式化消息的函数”此函数接受姓名和分数,并打印格式化的消息。它不返回任何值。
% 将此代码保存为文件 'printScore.m'function printScore(playerName, score) % 以格式化的方式显示玩家分数。 fprintf('Update: Player ''%s'' has reached a score of %d.\n', playerName, score);end您可以从命令行窗口或其他脚本调用此函数:
printScore('Alex', 1500)Update: Player 'Alex' has reached a score of 1500.示例 2:生成绘图的函数
Section titled “示例 2:生成绘图的函数”一个非常常见的用例是将绘图逻辑封装到可重用函数中。
% 将此代码保存为文件 'plotMyData.m'function plotMyData(x_data, y_data, plotTitle) % 为给定数据创建自定义折线图。 figure; % 创建一个新的图形窗口 plot(x_data, y_data, '-o', 'LineWidth', 1.5); title(plotTitle); xlabel('Measurement Index'); ylabel('Value'); grid on; legend('My Data');end使用方法:
time = 1:10;sensorReadings = [2.1, 3.4, 4.1, 3.9, 5.0, 5.2, 6.1, 5.8, 6.5, 7.2];plotMyData(time, sensorReadings, 'Sensor Readings Over Time');执行此代码不会向工作区返回任何变量。相反,它的副作用是生成一个新图形窗口,其中包含 sensorReadings 数据的折线图。该图具有标题、坐标轴标签、网格和图例,这些都在函数中定义。
返回值的函数与执行动作的函数
Section titled “返回值的函数与执行动作的函数”区分计算一个值和执行动作的函数至关重要。考虑以下区别:
% 计算值的函数(良好实践)function s = calculateSum(a, b) s = a + b;end
% 执行动作的函数(过程式)function displaySum(a, b) sumResult = a + b; fprintf('The sum is: %g\n', sumResult);end关键区别:calculateSum 将结果返回给调用者,然后调用者可以决定显示它、保存它或在其他计算中使用它。displaySum 的灵活性较低,因为它只能将结果显示到控制台。经验法则:如果主要目的是计算值,则返回该值。如果主要目的是执行绘图或保存等操作,则使用过程式函数。
- 值传递(Pass-by-Value):默认情况下,MATLAB 按值传递参数。这意味着函数无法更改调用者的输入变量,除非它们是
handle对象。这可以防止意外的副作用。 - 模块化和可重用性:将绘图或保存等操作封装到函数中,可以使您的主脚本更整洁,并且操作可重用。例如,
plotMyData可以用不同的数据集多次调用。