Documento: Definição


Uma função pode ser definida em qualquer parte de um programa que componha uma aplicação. Contudo, as definições de 2 ou mais funções não podem se intercalar. A estrutura básica para a definição de uma função é:

[ STATIC ] FUNCTION < nome identificador > [ ( < lista de parâmetros > ) ]
               [ < declaração de variáveis > ]
                         .
                         . 
                         . 
               < instruções >
                         . 
                         . 
                         . 
RETURN < expressão de resultado >

No início, obrigatoriamente, deve ser definido o nome da função por meio do comando FUNCTION e, opcionalmente, a sua classe por meio da cláusula STATIC. Entre parênteses pode ser definida uma lista opcional de parâmetros, separados por vírgulas, que serão utilizados como argumentos para o processamento e a obtenção do resultado da função.

Na sequência, nas primeiras linhas da função, devem ser declaradas as variáveis que serão utilizadas pela função. Elas são declaradas por meio dos comandos LOCAL, STATIC ou PRIVATE, conforme veremos na sequência dessa documentação.

Em seguida, deve ser incluído o corpo da função, que corresponde a uma série de instruções e estruturas de controle do fluxo de programação. O corpo da função conterá a lógica de programação responsável por obter os resultados.

Para finalizar uma função deve existir pelo menos um comando RETURN, que fornecerá o resultado da função para a rotina que a executou. Pode existir mais de um comando RETURN dentro da mesma função. Um comando RETURN pode ser incluído em qualquer linha de uma função, permitindo que ela seja finalizada em qualquer ponto da sua execução, de acordo com o objetivo ou o resultado.

O comando RETURN fornece apenas um único valor como resultado da função. Caso uma função precise retornar vários valores como resultado, deve-se utilizar um array (matriz ou vetor) como retorno da função.

Uma função pode retornar qualquer tipo de dado, incluindo arrays (matriz ou vetor), objetos, blocos de código, valores lógicos (True / .T. ou False / .F.) e o valor NIL, que representa ausência de dado (nulo). O valor de retorno de uma função pode ser uma constante ou uma expressão, que será avaliada e fornecerá o resultado. Caso o valor retornado por uma função não seja utilizado pela rotina que a executou, ele será automaticamente descartado. Dessa forma, uma função pode ser utilizada como função principal. Ou seja, diretamente em uma linha de instrução do programa ou no menu da aplicação.

A função abaixo exemplifica os conceitos expostos. A partir de uma data recebida como parâmetro, ela executa um processamento e retorna o nome do respectivo dia da semana.

// Declaração do nome da função e dos seus parâmetros
FUNCTION DiaToSem(nDia)

               // Declaração das variáveis
               LOCAL cSemana

               // Corpo da Função
               IF DOW(nDia) == 1
                    cSemana := "Domingo"
               ELSEIF DOW(nDia) == 2
                    cSemana := "Segunda-feira"
               ELSEIF DOW(nDia) == 3
                    cSemana := "Terça-feira"
               ELSEIF DOW(nDia) == 4
                    cSemana := "Quarta-feira"
               ELSEIF DOW(nDia) == 5
                    cSemana := "Quinta-feira"
               ELSEIF DOW(nDia) == 6
                    cSemana := "Sexta-feira"
               ELSEIF DOW(nDia) == 7
                    cSemana := "Sábado"
               ELSE
                    cSemana := "Indefinido"
               ENDIF

// Retorna o resultado da função e a finaliza
RETURN cSemana

Caso a cláusula STATIC fosse utilizada para definir a função, ela seria visível, ou seja, poderia ser executada, apenas pelas outras funções contidas no mesmo programa (arquivo .PRW) na qual ela foi definida.

  • Sem rótulos