argn nombre effectif d'arguments d'entrée reçus / attendus en sortie d'une fonction

## Séquence d'appel

               [lhs, rhs] = argn()
                lhs = argn(1)
                rhs = argn(2)

## Arguments

lhs

  Nombre d'arguments de sortie attendus. Vaut `0` si la fonction a été appelée sans argument de sortie.

rhs

  Nombre d'arguments passés en entrée de la fonction Scilab considérée.

## Description

Cette fonction est utilisée à l'intérieur d'une définition de fonction. Elle donne le nombre effectif (au moment de l'appel) d'arguments d'entrée `rhs` et de sortie `lhs`. Elle permet d'utiliser des arguments optionnels.

L'existence d'un argument d'entrée nommé (hors de la portée d'un éventuel varargin) peut être testée avec `isdef(..,"l")` de manière plus robuste qu'en utilisant `argn()`. Un exemple figure ci-après.

## Exemples

Exemples élémentaires :

    function [res, res2] = test(a, b)
      [lhs, rhs] = argn()
      [res, res2] = ("abc", %pi);
      disp([lhs rhs])  // <<<<<<<<<<<
    endfunction

    test();
    test(4.321);
    test(3, -1);
    test(3, -1, a=0);
    test(3, -1, c=8);

    out1 = test();
    [o1, o2] = test(%pi);

Avec varargin ou/et varargout:

    function [varargout] = disp_argn(varargin)
      varargout = list("abc",%i);
      [lhs, rhs] = argn()
      disp([lhs rhs])  // <<<<<<<<<<<
    endfunction

    function [res, varargout] = disp_argn_with_args(a, varargin)
      res = "abc";
      varargout = list(%i);
      [lhs, rhs] = argn()
      disp([lhs rhs])  // <<<<<<<<<<<
    endfunction

    // varargin
    disp_argn(1);
    disp_argn_with_args(1);
    disp_argn(1, 2);
    disp_argn_with_args(1, 2);
    disp_argn(1, 2, 3);
    disp_argn_with_args(1, 2, 3);

    // varargout
    out1 = disp_argn();
    out1 = disp_argn_with_args();
    [o1, o2] = disp_argn();
    [o1, o2] = disp_argn_with_args();
    [o1, o2, o3] = disp_argn();
    [o1, o2, o3] = disp_argn_with_args();

Test robuste de l'existence d'un argument d'entrée:

    function res = test(a, b, varargin)
        res = ""
        if isdef("a","l")
            res = "a passed."
        end
        if isdef("b","l")
            res = res + " b passed."
        end
        if isdef("c","l")
            res = res + " c passed."
        end
    endfunction
    clc
    test()
    test(4.321)
    test(4.321, %z)
    test(b=3)
    test(c=3)
    test(-1, c=3)
    test(-1, a=2, c=3)
    test(b=-1, a=2, c=3)

Autre usage fréquent:

    function concat = maFonction(nom,option)
      [lhs, rhs] = argn()
      if rhs <= 1 then
         option = "mon argument optionnel";
      end
      if rhs == 0 then
         error("Au moins un argument attendu");
      end
      concat = nom+" "+option;
    endfunction

## Voir aussi

- isdef
- varargin
- varargout
- macrovar
- function

## History

6.1.0 L'argument `lhs` est assigné à zero si appelé sans argument de sortie.