Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

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 facilita la lectura y el mantenimiento del código.

Las funciones locales son subrutinas que están disponibles en el mismo archivo. Las funciones locales son la forma más frecuente de dividir tareas programáticas. En un archivo de función, que solo contiene definiciones de función, las funciones locales pueden aparecer en el archivo en cualquier orden después de la función principal del archivo. En un archivo de script, que contiene comandos y definiciones de función, la función local debe estar al final del archivo. (Las funciones en scripts se admiten en la versión R2016b o posteriores).

Por ejemplo, cree un archivo de función llamado 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 u otro archivo de programa, aunque las funciones locales solo están disponibles para myfunction:

myfunction(pi)
ans =
   16.1528

Las funciones anidadas están completamente contenidas 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 las funciones principales sin pasar de manera explícita dichas variables como argumentos.

Las funciones anidadas son útiles cuando las subrutinas comparten datos, como las aplicaciones que pasan datos entre componentes. Por ejemplo, cree una función que permita establecer un valor entre 0 y 1 con un control deslizante o un cuadro de texto editable. Si se usan funciones anidadas para los callbacks, el control deslizante y el cuadro de texto pueden compartir el valor y los identificadores de cada uno sin 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, solo se puede acceder a las funciones privadas 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 cambio, están en una subcarpeta llamada private. Las funciones privadas solo están disponibles para las funciones de la carpeta inmediatamente superior a la carpeta private. Use funciones privadas para separar el código en diferentes archivos o para compartir código entre varias funciones relacionadas.

Funciones anónimas sin archivo

Las funciones anónimas permiten definir una función sin crear un archivo de programa, siempre que la función conste de una sola instrucción. Una aplicación frecuente de las funciones anónimas es definir una expresión matemática y, después, evaluar dicha expresión en un rango de valores utilizando una función de una función de MATLAB®, es decir, una función que acepte un identificador de función como entrada.

Por ejemplo, esta instrucción crea un identificador de función llamado s para una función anónima:

s = @(x) sin(1./x);

Esta función tiene una única entrada, x. El operador @ crea el identificador de función.

Puede usar el identificador de función para evaluar la función para valores concretos, como

y = s(pi)
y = 0.3130

O puede pasar el identificador de función a una función que evalúe en un rango de valores, como fplot:

range = [0.01,0.1];
fplot(s,range)

Temas relacionados