Hoje vamos conhecer um pouco dos conceitos básicos e diferenças entre métodos, procedures e funções. Bora conferir?!
Rotinas
Um conceito importante no Object Pascal (assim como em outras linguagens, como o C, por exemplo) são as rotinas. As rotinas são, basicamente, uma série de comandos agrupados com um nome único, na qual pode ser chamado quantas vezes for necessário, evitando, assim, a escrita do mesmo código várias vezes.
”Dessa forma, você pode pensar nas rotinas como um mecanismo de encapsular códigos básicos.” (Marco Cantú)
Procedures e Functions
Em Object Pascal, as rotinas podem assumir duas formas:
procedure
ou function
. A diferença básica entre elas está no fato de que a função nos retorna um valor ou um tipo, enquanto o procedimento não tem nenhum retorno. Ambos podem ter múltiplos parâmetros de qualquer tipo, e são a base dos métodos de classe.
Sintaxe
Os procedimentos são especificados pela palavra chave
procedure
. Abaixo um pequeno exemplo de um procedimento:procedure OlaMundo; begin Writeln('Olá Mundo!'); end;Já as funções, são especificadas pela palavra chave
function
e sempre retornam um valor com um tipo especificado no cabeçalho da função. O seu retorno pode ser feito de duas formas diferentes: uma é atribuindo o valor de retorno ao nome da função, a outra forma é atribuindo o valor de retorno à palavra chave Result
. Veja os exemplos:
// Exemplo com Result function SomaValores(Valor1: Integer; Valor2: Integer): Integer; begin Result := Valor1 + Valor2; end;
// Exemplo com o nome da função function MultiplicaValores(Valor1: Integer; Valor2: Integer): Integer; begin MultiplicaValores := Valor1 * Valor2; end;O
Result
e o nome da função sempre representarão o mesmo valor, como podemos ver no exemplo abaixo, na qual retornará o valor 11.// Exemplo com o nome da função e Result function MisturaValores(): Integer; begin Result := 5; MisturaValores := Result * 2; Result := Result + 1; end;
Mas, é importante salientar a diferença entre os dois:
- O
Result
representa uma variável e pode ser utilizado nos dois lados da sinal de atribuição, ou seja, ele pode receber a atribuição de um valor (como acontece emResult := 5;
) ou, ter seu valor utilizado para atribuir em outra variável (como acontece nas outras linhas), além de poder ser passado por parâmetro para outros métodos, por exemplo; - Já o nome da função quando utilizado do lado esquerdo no sinal de atribuição, o compilador assumirá que ele está sendo utilizado como forma de rastrear o retorno da função, e quando usado em qualquer outro lugar, o compilador interpretará como uma chamada recursiva ao próprio método.
O uso do nome da função para retornar o seu valor é uma notação clássica do Pascal que é raramente usada nos dias de hoje. Já o uso do Result
é a forma mais comum de retornar o seu valor.
Mas, como podemos fazer uso dos procedimentos e funções?
Para usar os procedimentos e as funções basta informar seu nome seguido dos parâmetros entre parênteses. Nos casos em que não houver parâmetros, os parênteses podem ser omitidos. Veja:
// Chama o procedimento OlaMundo; // Chama as funções X := SomaValores(23, 15); Y := MultiplicaValores(3, 15); Y := MultiplicaValores(X, 2);Observe que a função
MultiplicaValores
foi chamada duas vezes no código sendo cada chamada com valores diferentes na passagem dos parâmetros, exemplificando, assim, a reutilização do código. Além disso, podemos acrescentar o conceito de encapsulamento, já que quando chamamos a função MultiplicaValores
não precisamos saber qual foi o algoritmo criado internamente para implementá-la.Com o uso das funções e procedimentos, caso no futuro a gente descubra uma forma melhor de implementar o código, ou ainda, caso a regra daquela rotina venha a mudar, basta ajustar o código dentro dela e os pontos em que as chamam não terão necessidade de ajustes.
Sobrecarga de métodos
No Delphi, pode-se declarar mais de um método com o mesmo nome. Isso é o que chamamos de sobrecarga de métodos, ou overloding.
Para serem sobrecarregados, os métodos precisam utilizar a diretiva
overload;
e precisam ter uma lista de parâmetros distintos. Por exemplo:function DivideValores(X, Y: Real): Real; overload; begin Result := X/Y; end; function DivideValores(X, Y: Integer): Integer; overload; begin Result := X div Y; end;
Veja, que foram declarados duas funções com mesmo nome, porém com parâmetros distintos em seu tipo. Assim, quando fizermos a chamada da função, passando por parâmetro os valores
(10, 2.5)
o compilador automaticamente chamará a primeira declaração da procedure, já que o 2.5 representa um Real
.Outros pontos devem ser considerados no overload de métodos. Mas deixaremos para abordar esse assunto em um próximo artigo 😉.Por fim, podemos concluir que:
- Métodos são rotinas (uma série de comandos agrupados com um nome único) que podem assumir duas formas:
procedure
oufunction
; - As functions se distinguem das procedures pelo seu retorno;
- Os métodos nos auxiliam a organizar nosso código-fonte, e, além de facilitar uma futura manutenção, nos ajudam a encapsular e reutilizar códigos sem necessidade de reescrita.
E se você quiser saber mais sobre as procedures e funções, sugiro a leitura da documentação oficial no
site da Embarcadero.
Forte abraço e nos vemos no próximo post! ;)
Autor: Flávia Melo
Esse exemplo e tantos outros disponíveis aqui no blog, você pode conferir acessando meu repositório no github.
Postar um comentário