<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) ????-2008 - INRIA
 *
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="function" xml:lang="pt">
    <refnamediv>
        <refname>function</refname>
        <refpurpose>abre definição de função</refpurpose>
    </refnamediv>
    <refnamediv xml:id="endfunction">
        <refname>endfunction</refname>
        <refpurpose>encerra definição de função</refpurpose>
    </refnamediv>
    <refsection>
        <title>Descrição</title>
        <programlisting  role='no-scilab-exec'><![CDATA[
function <lhs_arguments>=<function_name><rhs_arguments>
<statements>
endfunction
 ]]></programlisting>
        <para>Onde</para>
        <variablelist>
            <varlistentry>
                <term>&lt;function_name&gt;</term>
                <listitem>
                    <para>é o nome da função</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>&lt;rhs_arguments&gt;</term>
                <listitem>
                    <para>é a lista de argumentos de entrada. Pode ser:</para>
                    <itemizedlist>
                        <listitem>
                            <para>uma seqüência separada por vírgula de nomes de variáveis
                                encerrada por parênteses, como <literal>(x1,...,xm)</literal>. O
                                último nome de variável pode ser a palavra-chave
                                <literal>varargin</literal> (ver <link linkend="varargin">varargin</link>)
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                a seqüência <literal>()</literal> ou nada, se a função não
                                possui argumentos de entrada.
                            </para>
                        </listitem>
                    </itemizedlist>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>&lt;lhs_arguments&gt;</term>
                <listitem>
                    <para>é a lista de argumentos de saída. Pode ser:</para>
                    <itemizedlist>
                        <listitem>
                            <para>uma seqüência separada por vírgula de nomes de variáveis
                                encerrada por colchetes, como <literal>[y1,...,yn]</literal>. O
                                último nome de variável pode ser a palavra-chave
                                <literal>varargout</literal> (ver <link linkend="varargout">varargout</link>)
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                a seqüência <literal>[]</literal>, se a função não possui
                                argumentos de saída. neste caso, a sintaxe também, pode ser:
                                <literal>function
                                    &lt;function_name&gt;&lt;rhs_arguments&gt;
                                </literal>
                            </para>
                        </listitem>
                    </itemizedlist>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>&lt;statements&gt;</term>
                <listitem>
                    <para>conjunto de instruções Scilab (declarações). Esta sintaxe pode
                        ser usada para definir funções (ver <link linkend="functions">functions</link>) inline ou em arquivo
                        script (ver <link linkend="exec">exec</link>). Para compatibilidade com versões Scilab antigas,
                        as funções podem ser definidas em um arquivo script contendo apenas
                        definições de funções podem ser "carregadas" no Scilab através da
                        função <function>exec</function>.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
        <para>
            A seqüência <literal>function
                &lt;lhs_arguments&gt;=&lt;function_name&gt;&lt;rhs_arguments&gt;
            </literal>
            não pode ser separada em várias linhas. Esta seqüência pode ser seguida
            por declarações na mesma linha, se uma vírgula ou ponto-e-vírgula for
            adicionado ao seu fim.
        </para>
        <note>
            Note that <literal>&lt;function_name&gt;</literal> must respect some syntax rules (see <link linkend="names">names</link>).
        </note>
        <para>Definições de funções podem ser aninhadas.</para>
    </refsection>
    <refsection>
        <title>Exemplos</title>
        <programlisting role="example"><![CDATA[
//definição inline
function [x,y]=myfct(a,b)
x=a+b
y=a-b
endfunction

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

//uma definição de função de uma linha
function y=sq(x),y=x^2,endfunction

sq(3)

//definição de função aninhada
function y=foo(x)
a=sin(x)
function y=sq(x), y=x^2,endfunction
y=sq(a)+1
endfunction

foo(%pi/3)

// definição em um arquivo script (ver exec)
exec SCI/modules/elementary_functions/macros/asinh.sci;
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>Ver Também</title>
        <simplelist type="inline">
            <member>
                <link linkend="functions">functions</link>
            </member>
            <member>
                <link linkend="exec">exec</link>
            </member>
            <member>
                <link linkend="names">names</link>
            </member>
        </simplelist>
    </refsection>
    <refsection role="history">
        <title>Histórico</title>
        <revhistory>
            <revision>
                <revnumber>6.0.0</revnumber>
                <revdescription>
                  <literal>function</literal> and <literal>endfunction</literal> are now protected:
                  Assignments like <literal>function=1</literal> or <literal>endfunction=2</literal>
                  are no longer possible.
                </revdescription>
            </revision>
        </revhistory>
    </refsection>
</refentry>
