# functions

procedimentos Scilab e objetos Scilab

## Descrição

Funções são procedimentos Scilab ("macro", "função" e "procedure" possuem o mesmo significado).

## Definição de Função

Geralmente, elas são definidas em arquivos com um edito e carregadas no Scilab através da função exec ou através de uma biblioteca (ver lib ou genlib). Mas também podem ser definidas on-line (ver deff ou function. Uma função é definida por dois componentes:

- uma parte "definição de sintaxe" como segue:

      function [y1,...,yn]=foo(x1,...,xm)
      function [y1,...,yn,varargout]=foo(x1,...,xm,varargin)

- uma seqüência de instruções Scilab.

A linha de "definição de sintaxe" fornece a sintaxe de chamamento "completa" para esta função. As variáveis `yi` são variáveis de saída calculadas em função das variáveis de entrada `xi` e variáveis existentes no Scilab quando a função é executada.

## Chamada de Função

- A sintaxe de chamamento de função usual é `[y1,...,yn]=foo(x1,...,xm)`. Listas de argumentos de entrada ou saída mais curtos que as da definição podem ser usadas. Em tais casos, apenas as primeiras variáveis da esquerda para direita são usadas ou definidas.

  A função argn pode ser utilizada para se o número total real de argumentos de chamada.

- É possível definir funções com número máximo indeterminado de argumentos de entrada ou saída. Isto pode ser feito utilizando-se as palavras-chave varargin e varargout keywords. Veja os links para detalhes.

- Também é possível utilizar "argumentos nomeados" para especificar argumentos de entrada: suponha que a função `fun1 seja` definida como `function y1=fun1(x1,x2,x3)` ,então pode ser chamada com uma sintaxe como `y=fun1(x1=33,x3=[1 2 3])`. Dentro de `fun1` x2 será indefinida.

  Também pode ser chamada com sintaxe como `y=fun1(x1=33,y='foo')`. Em tal caso, a variável `y` estará disponível no contexto da função `fun1`. Note que o número máximo de argumentos deve ser menor que ou igual ao número de argumentos de entrada fornais utilizados na parte de sintaxe da função.

  É possível buscar por variáveis definidas através da função exists.

- Quando uma função não possui argumento de lado esquerdo e é chamada apenas com argumentos strings, a sintaxe de chamamento pode ser simplificada:

      fun('a','toto','a string')

  is equivalent to:

      fun a toto 'a string'

## Miscelânea

Funções Scilab são objetos (com números de tipo 13 ou 11). Elas podem ser manipuladas (construídas, salvas, carregadas, passadas como argumentos,..) como outros tipos de variáveis.

Coleções de funções podem ser reunidas em bibliotecas. Funções que começam pelo sinal `%` (ex: `%foo`) são geralmente utilizadas para operações de sobrecarga (ver overloading ) ou são funções para novos tipos de dados.

## Exemplos

    //definição inline (ver function)
    function [x,y]=myfct(a,b)
      x=a+b
      y=a-b
    endfunction

    [x,y]=myfct(3,2)

    //definição inline (ver deff)
    deff('[x,y]=myfct(a,b)',['x=a+b';
                             'y=a-b'])
    // definição em um arquivo ASCI (ver exec)
    exec SCI/modules/elementary_functions/macros/asinh.sci;

## Ver Também

- function
- deff
- exec
- comp
- lib
- getd
- genlib
- exists
- varargin
- varargout