Créer un handle de fonction
Qu’est-ce qu’un handle de fonction ?
Un handle de fonction est un type de données MATLAB® qui stocke une association à une fonction. Le fait d’appeler indirectement une fonction vous permet de l’invoquer depuis n’importe quel emplacement. Les handles de fonction sont généralement utilisés pour :
Passer une fonction à une autre fonction (souvent appelée fonction de fonctions). Par exemple, il est possible de passer une fonction à des fonctions d’intégration et d’optimisation comme
integral
etfzero
.Spécifier des fonctions de rappel (par exemple, un rappel qui répond à un événement de l’UI ou qui interagit avec du hardware d’acquisition de données).
Créer des handles vers des fonctions définies en inline au lieu d’être stockées dans un fichier de programme (fonctions anonymes).
Appeler des fonctions locales à l’extérieur de la fonction principale.
Vous pouvez déterminer si une variable h
est un handle de fonction avec isa
(h,'function_handle')
.
Créer des handles de fonction
Afin de créer un handle pour une fonction, insérez un signe @
avant le nom de cette fonction. Par exemple, pour une fonction nommée myfunction
, créez un handle nommé f
comme suit :
f = @myfunction;
Vous pouvez appeler une fonction par son handle de la même manière que vous l’appelleriez directement. Supposons par exemple que vous disposiez d’une fonction nommée computeSquare
et définie comme suit :
function y = computeSquare(x) y = x.^2; end
Créez un handle et appelez la fonction pour calculer quatre au carré.
f = @computeSquare; a = 4; b = f(a)
b = 16
Si la fonction ne nécessite aucun argument en entrée, vous pouvez l’appeler avec des parenthèses vides comme suit :
h = @ones; a = h()
a = 1
Si vous omettez les parenthèses, l’affectation crée un autre handle de fonction.
a = h
a = @ones
Les handles de fonction sont des variables que vous pouvez passer à d’autres fonctions. Par exemple, calculez l’intégrale de x2 sur la plage [0,1].
q = integral(f,0,1);
Les handles de fonction stockent leur chemin absolu. Par conséquent, un handle valide vous permet d’invoquer la fonction depuis n’importe quel emplacement. Lorsque vous créez le handle, vous n’avez pas besoin de spécifier le chemin de la fonction mais seulement son nom.
Tenez compte des éléments suivants lorsque vous créez des handles de fonction :
Longueur du nom : chacune des parties du nom de la fonction (y compris le nom du package et de la classe) doit avoir une longueur inférieure à celle spécifiée par
namelengthmax
. Dans le cas contraire, MATLAB tronque la dernière partie du nom.Portée : la fonction doit être dans la portée au moment où vous créez le handle. Par conséquent, elle doit figurer dans le chemin MATLAB ou dans le dossier courant. Pour les handles vers des fonctions locales ou imbriquées, la fonction doit se trouver dans le fichier courant.
Priorité : si plusieurs fonctions portent le même nom, MATLAB définit les handles de fonction en suivant les mêmes règles de priorité que pour l’appel de fonctions. Pour plus d’informations, consultez Function Precedence Order.
Surcharge : en cas d’invocation d’une fonction comportant un ou plusieurs arguments, MATLAB identifie l’argument dominant. Si l’argument dominant est un objet, MATLAB détermine si la classe de cette objet possède une méthode qui surcharge le même nom que la fonction associée au handle. Si tel est le cas, la méthode de l’objet est invoquée au lieu de la fonction associée.
Fonctions anonymes
Il est possible de créer des handles vers des fonctions anonymes. Une fonction anonyme est une fonction MATLAB d’une seule ligne basée sur une expression et ne nécessitant pas de fichier de programme. Créez un handle vers une fonction anonyme en définissant le corps de la fonction anonymous_function
et une liste d’arguments en entrée pour la fonction anonyme arglist
. La syntaxe est la suivante :
h = @(arglist)anonymous_function
Par exemple, créez un handle sqr
vers une fonction anonyme qui calcule le carré d’un nombre puis appelez la fonction anonyme à l’aide de son handle.
sqr = @(n) n.^2; x = sqr(3)
x = 9
Pour plus d’informations, consultez Anonymous Functions.
Tableaux de handles de fonction
Il est possible de créer un tableau de handles de fonction en les regroupant dans un cell array ou un tableau de structure. Par exemple, utilisez un cell array :
C = {@sin, @cos, @tan}; C{2}(pi)
ans = -1
Ou utilisez un tableau de structure :
S.a = @sin; S.b = @cos; S.c = @tan; S.a(pi/2)
ans = 1
Enregistrer et charger des handles de fonction
Vous pouvez enregistrer et charger des handles de fonction dans MATLAB comme pour toute autre variable. c’est-à-dire en utilisant les fonctions save
et load
. Si vous enregistrez un handle de fonction, MATLAB enregistre les informations du chemin absolu. Vous pouvez invoquer la fonction depuis n’importe quel emplacement accessible à MATLAB tant que le fichier de la fonction existe à cet emplacement. Le handle n’est pas valide si l’emplacement ou le nom du fichier a changé depuis la création du handle. Si un handle n’est pas valide, MATLAB peut afficher un avertissement lorsque vous chargez le fichier. Lorsque vous invoquez un handle non valide, MATLAB génère une erreur.
Voir aussi
str2func
| func2str
| functions
| isa
| function_handle