Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión 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 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)

Figure contains an axes object. The axes object contains an object of type functionline.

Temas relacionados

Sitios web externos