Compreendendo e usando funções e procedimentos
Imagens Maskot/Getty
Você já se pegou escrevendo o mesmo código repetidamente para realizar alguma tarefa comum dentromanipuladores de eventos? Sim! É hora de você aprender sobre programas dentro de um programa. Vamos chamar esses miniprogramas de sub-rotinas.
Introdução às sub-rotinas
As sub-rotinas são uma parte importante de qualquer linguagem de programação , e Delfos não é exceção. Em Delphi, geralmente existem dois tipos de sub-rotinas: uma função e um procedimento. A diferença usual entre uma função e um procedimento é que uma função pode retornar um valor, e um procedimento geralmente não o fará. Uma função é normalmente chamada como parte de uma expressão.
Dê uma olhada nos exemplos a seguir:
|_+_|Uma vez definidas as sub-rotinas, podemos chamá-las uma ou mais vezes:
|_+_|
Funções e Procedimentos
Como podemos ver, tanto as funções quanto os procedimentos agem como miniprogramas. Em particular, eles podem ter seu próprio tipo, constantes e declarações de variáveis dentro deles.
Dê uma olhada em uma função SomeCalc (miscellaneous):
|_+_|Todo procedimento ou função começa com um cabeçalho que identifica o procedimento ou função e lista os parâmetros a rotina usa se houver. Os parâmetros estão listados entre parênteses. Cada parâmetro tem um nome de identificação e geralmente tem um tipo. Um ponto e vírgula separa os parâmetros em uma lista de parâmetros uns dos outros.
sStr, iYear e iMonth são chamados parâmetros constantes . Parâmetros constantes não podem ser alterados pela função (ou procedimento). O iDay é passado como um foi parâmetro , e podemos fazer alterações nele, dentro da sub-rotina.
As funções, uma vez que retornam valores, devem ter um tipo de retorno declarado no final do cabeçalho. O valor de retorno de uma função é dado pela atribuição (final) ao seu nome. Como toda função tem implicitamente uma variável local Result do mesmo tipo que o valor de retorno da função, atribuir a Result tem o mesmo efeito que atribuir ao nome da função.
Posicionando e Chamando Sub-rotinas
As sub-rotinas são sempre colocadas na seção de implementação da unidade. Tais sub-rotinas podem ser chamadas (usadas) por um manipulador de eventos ou sub-rotina na mesma unidade que é definida depois dela.
Nota: a cláusula uses de uma unidade informa quais unidades ela pode chamar. Se quisermos que uma sub-rotina específica em uma Unidade1 seja utilizável pelos manipuladores de eventos ou sub-rotinas em outra unidade (digamos, Unidade2), temos que:
- Adicione Unit1 à cláusula uses de Unit2
- Coloque uma cópia do cabeçalho da sub-rotina na seção de interface da Unit1.
Isso significa que as sub-rotinas cujos cabeçalhos são dados na seção de interface são escopo global .
Quando chamamos uma função (ou um procedimento) dentro de sua própria unidade, usamos seu nome com qualquer parâmetros são precisos. Por outro lado, se chamamos uma sub-rotina global (definida em alguma outra unidade, por exemplo, MyUnit), usamos o nome da unidade seguido por um ponto.
|_+_|Nota: funções ou procedimentos podem ter suas próprias sub-rotinas embutidas dentro deles. Uma sub-rotina incorporada é local para a sub-rotina do contêiner e não pode ser usada por outras partes do programa. Algo como:
|_+_|