Файлы программ могут содержать несколько функций. Локальные и вложенные функции полезны для разделения программ на более мелкие задачи, облегчая чтение и обслуживание кода.
Локальные функции - это подпрограммы, доступные в одном файле. Локальные функции являются наиболее распространенным способом разбить программные задачи. В файле функций, содержащем только определения функций, локальные функции могут появляться в файле в любом порядке после основной функции в файле. В файле сценария, содержащем команды и определения функций, локальная функция должна находиться в конце файла. (Функции в скриптах поддерживаются в R2016b или более поздних версиях.)
Например, создайте файл функции с именем myfunction.m который содержит основную функцию, myfunctionи две локальные функции, squareMe и doubleMe:
function b = myfunction(a) b = squareMe(a)+doubleMe(a); end function y = squareMe(x) y = x.^2; end function y = doubleMe(x) y = x.*2; end
Можно вызвать основную функцию из командной строки или другого файла программы, хотя локальные функции доступны только для myfunction:
myfunction(pi)
ans = 16.1528
Вложенные функции полностью содержатся в другой функции. Основное отличие вложенных функций от локальных состоит в том, что вложенные функции могут использовать переменные, определенные в родительских функциях, без явной передачи этих переменных в качестве аргументов.
Вложенные функции полезны, когда подпрограммы совместно используют данные, например приложения, передающие данные между компонентами. Например, создайте функцию, позволяющую задать значение от 0 до 1 с помощью ползунка или редактируемого текстового поля. При использовании вложенных функций для обратных вызовов ползунок и текстовое поле могут совместно использовать значение и дескрипторы друг друга, не передавая их явным образом:
function myslider value = 0; f = figure; s = uicontrol(f,'Style','slider','Callback',@slider); e = uicontrol(f,'Style','edit','Callback',@edittext,... 'Position',[100,20,100,20]); function slider(obj,~) value = obj.Value; e.String = num2str(value); end function edittext(obj,~) value = str2double(obj.String); s.Value = value; end end
Как и локальные или вложенные функции, частные функции доступны только для функций в определенном расположении. Однако частные функции не находятся в том же файле, что и функции, которые могут их вызывать. Вместо этого они находятся в подпапке с именем private. Частные функции доступны только для функций в папке непосредственно над private папка. Частные функции используются для разделения кода на различные файлы или для совместного использования кода несколькими связанными функциями.
Анонимные функции позволяют определять функцию без создания файла программы, если функция состоит из одного оператора. Обычным применением анонимных функций является определение математического выражения, а затем оценка этого выражения в диапазоне значений с использованием функции MATLAB ®, т.е. функции, которая принимает дескриптор функции в качестве входного значения.
Например, этот оператор создает дескриптор функции с именем s для анонимной функции:
s = @(x) sin(1./x);
Эта функция имеет один вход, x. @ оператор создает дескриптор функции.
Можно использовать дескриптор функции для вычисления функции для определенных значений, таких как
y = s(pi)
y = 0.3130
Или можно передать дескриптор функции функции, которая вычисляет в диапазоне значений, таких как fplot:
range = [0.01,0.1]; fplot(s,range)
