Tipos de funciones
Funciones locales y anidadas en un archivo
Los archivos de programa pueden contener varias funciones. Las funciones locales y anidadas son útiles para dividir programas en tareas más pequeñas, lo que hace que su código sea más fácil de leer y de mantener.
Las funciones locales son subrutinas que están disponibles dentro del mismo archivo. Las funciones locales son la forma más habitual de dividir tareas programáticas. En un archivo de función, que solo contiene definiciones de funciones, las funciones locales pueden aparecer en el archivo en cualquier orden tras la función principal en el archivo. En un archivo de script, que contiene comandos y definiciones de funciones, la función local debe estar al final del archivo. (Las funciones en scripts son compatibles a partir de la versión R2016b).
Por ejemplo, cree un archivo de función denominado myfunction.m
que contenga una función principal, myfunction
, y dos funciones locales, squareMe
y 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
Puede llamar a la función principal desde la línea de comandos o desde otro archivo de programa, aunque las funciones locales solo estén disponibles para myfunction
:
myfunction(pi)
ans = 16.1528
Las funciones anidadas están contenidas por completo dentro de otra función. La principal diferencia entre las funciones anidadas y las funciones locales es que las funciones anidadas pueden utilizar variables definidas en funciones principales sin tener que pasar esas variables de manera explícita como argumentos.
Las funciones anidadas son útiles cuando las subrutinas comparten datos, como aplicaciones que pasan datos entre componentes. Por ejemplo, cree una función que permita establecer un valor entre 0 y 1 utilizando o bien un control deslizante o bien un cuadro de texto editable. Si utiliza funciones anidadas para los callbacks, el control deslizante y el cuadro de texto pueden compartir el valor y los identificadores entre sí sin tener que pasarlos de manera explícita:
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
Funciones privadas en una subcarpeta
Al igual que las funciones locales o anidadas, las funciones privadas son accesibles solo para funciones en una ubicación específica. Sin embargo, las funciones privadas no están en el mismo archivo que las funciones que pueden llamarlas. En su lugar, se encuentran en una subcarpeta denominada private
. Las funciones privadas están disponibles solo para funciones de la carpeta inmediatamente superior a la carpeta private
. Utilice funciones privadas para separar código en diferentes archivos o para compartir código entre varias funciones relacionadas.
Funciones anónimas sin un archivo
Las funciones anónimas permiten definir una función sin crear un archivo de programa, siempre y cuando la función se componga de una única instrucción. Una aplicación habitual de las funciones anónimas es definir una expresión matemática y, después, evaluar esa expresión en un intervalo de valores utilizando una función de funciones de MATLAB®, por ejemplo, una función que acepte un identificador de función como una entrada.
Por ejemplo, esta instrucción crea un identificador de función denominado s
para una función anónima:
s = @(x) sin(1./x);
Esta función tiene solo una entrada: x
. El operador @
crea el identificador de función.
Puede utilizar el identificador de función para evaluar la función para determinados valores, como
y = s(pi)
y = 0.3130
O puede pasar el identificador de función a una función que evalúe en un intervalo de valores, como fplot
:
range = [0.01,0.1]; fplot(s,range)