You are on page 1of 9

01/10/13

Conceitos bsicos sobre procedures e functions no Delphi

Tecnologias

Revistas

Cursos LO GIN:

Pocket videos

DevWare SENHA:

Frum

Servios

Publicar

Comprar C adastre -se

Bem vindo a DevMedia!

Esque ci m inha se nha

cdigo fonte

post favorito

comentrios

Conceitos bsicos sobre procedures e functions no Delphi


Veja neste artigo como trabalhar como procedures e functions no Delphi, conhecendo desde a sintaxe bsica, declarao e parmetros.

Go s t ei (1)

(0)

Ol pessoal, neste artigo vou demonstrar como trabalhar com functions e procedures no delphi, passando por definies, tipos de parmetros de entrada, chamadas e etc. Esse artigo destinado para o leitor iniciante em Delphi, geralmente existe sempre a dvida de como trabalhar com essas sub-rotinas. Para os leitores que tem conhecimento em Java ou C#, pode ser estranho esse termo procedure e function pois nessas linguagens existem somente chamada mtodos que podem ou no retornar valores, para diferenciar basta usar a palavra reservada void na assinatura do mtodo, que indica que tal mtodo no retorna valor. J no Object Pascal linguagem base do Delphi existem vrias definies diferentes em literaturas e na internet, mas em particular gosto de usar essa: PROCEDURE: Sub-rotina que processa informaes e no retorna valor. FUNCTION: Sub-rotina que processa informaes e retorna um valor.

Sintaxe:
Uma Function pode receber nenhum, um ou vrios parmetros de entrada e retornar um determinado valor, vamos a sintaxe bsica: Listagem 1: Sintaxe de um Function

F u n c t i o nN o m e F u n o ( P a r m e t r o 1 : T i p o ; P a r m e t r o 2 : T i p o ) :T i p od eR e t o r n o ; V a r { d e c l a r a od ev a r i v e i ss en e c e s s r i o } B e g i n { I n s t r u e s } / / P a r ar e t o r n a rov a l o rd e s e j a d op o d e m o su s a rap a l a v r ar e s e r v a d aR e s u l t . R e s u l t: =V a l o rd eR e t o r n o ; / / o uon o m ed af u n o . N o m e F u n o: =V a l o rd eR e t o r n o ; E n d ;

Um Procedure pode receber nenhum, um ou vrios parmetros de entrada mas no retorna nenhum tipo de valor, salvo excees que explico mais adiante. Listagem 2: Sintaxe de um Procedure

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

1/9

01/10/13
V a r

Conceitos bsicos sobre procedures e functions no Delphi


p r o c e d u r eN o m e P r o c e d u r e ( P a r m e t r o 1 : T i p o ; P a r m e t r o 2 : T i p o ) ; { d e c l a r a od ev a r i v e i ss en e c e s s r i o } B e g i n { I n s t r u e s } E n d ;

Exemplos:
Vamos ao exemplo de uma funo muito popular na internet para somar dois valores inteiros e retornar um valor inteiro. Notem que essa funo vai receber 2 parmetros do tipo integer e retornar a soma que do tipo integer. Listagem 3: Funo para somar 2 valores e retornar o valor da soma

f u n c t i o nS o m a ( a ,b :i n t e g e r ) :i n t e g e r ; b e g i n / / R e t o r n aov a l o rd as o m aa+b . R e s u l t: =a+b ; e n d ;

Agora um exemplo de procedure que vai receber um valor inteiro e verificar se esse valor par ou mpar, ao final emite uma mensagem na tela. Listagem 4: Procedure para verificar se o valor par ou mpar

p r o c e d u r eV e r i f i c a P a r I m p a r ( a :i n t e g e r ) ; b e g i n i fam o d2=0t h e n S h o w M e s s a g e ( ' N m e r op a r ! ' ) e l s e S h o w M e s s a g e ( ' N m e r o m p a r ! ' ) ; e n d ;

Notem que a procedure emite uma mensagem avisando se o valor par ou mpar, essa mensagem no pode ser considerada com um valor de retorno mas sim parte das instrues de processamento das informaes. J no caso da function ela processa a soma de a + b e retorna o valor da soma, podemos atribuir esse valor a um determinado componente ou varivel, na procedure no podemos executar esse tipo de atribuio, pois ela no possui valor de retorno.

Parmetros:
Como j foi mencionado se necessrio podemos passar parmetros para functions e procedures, esses parmetros podem ser por valor ou referncia. Valor: Nos 2 exemplos acima foram passados parmetros por valor, ou seja, internamente no compilador ser preenchido o parmetro que est entre parnteses com uma cpia do valor de origem, para que esse valor seja usado dentro da function ou procedure, mas o valor original no ser alterado, exemplo: Listagem 5: Exemplo de parmetro por valor

p r o c e d u r eT F o r m 1 . b t n 1 C l i c k ( S e n d e r :T O b j e c t ) ; v a r a ,b :I n t e g e r ; b e g i n / / I n i c i a" a "c o mv a l o r1 a: =1 ; / / V a r i v e l" b "r e c e b eov a l o rd er e t o r n od af u n oS o m a V a l o rp a s s a n d oav a i r v e l" a "c o m op a r m e t r o . b: =S o m a V a l o r ( a ) ; / / E m i t em e n s a g e mc o mo sv a l o r e s S h o w M e s s a g e ( ' V a l o rd e( a )a n t e sc h a m a d ad af u n o :'+I n t T o S t r ( a )+# 1 3+ ' V a l o rd e( b )a p sc h a m a d ad af u n o :'+I n t T o S t r ( b ) +# 1 3+ ' V a l o rd e( a )a p sc h a m a d ad af u n o :'+I n t T o S t r ( a ) ) ; e n d ; f u n c t i o nT F o r m 1 . S o m a V a l o r ( x :i n t e g e r ) :I n t e g e r ; b e g i n / / A d i c i o n a1 0 0 0a ov a l o rd ea x: =x+1 0 0 0 ;

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

2/9

01/10/13
/ / R e t o r n aov a l o rd ea R e s u l t: =x ; e n d ;

Conceitos bsicos sobre procedures e functions no Delphi

Figura 1: Mensagem exibindo os valores das variveis a e b Notem que no houve alterao no valor da varivel a mesmo aps a chamada da funo, isso porque o valor de a foi copiado para o parmetro x da funo SomaValor, sendo assim podemos alterar valores de x porque ela no tem vnculo com a varivel a. Referncia: Podemos modificar esse contexto se utilizarmos na assinatura da function antes do nome do parmetro a palavra reservada var, isso indica que ser passado o endereo da varivel a como parmetro e no mais a cpia do valor como anteriormente. Desse modo toda e qualquer alterao no valor de x dentro da function ser revertida para varivel a, exemplo: Listagem 6: Exemplo de parmetro por referncia

f u n c t i o nT F o r m 1 . S o m a V a l o r ( v a rx :i n t e g e r ) :I n t e g e r ; b e g i n / / A d i c i o n a1 0 0 0a ov a l o rd ea x: =x+1 0 0 0 ; / / R e t o r n aov a l o rd ea R e s u l t: =x ; e n d ;

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

3/9

01/10/13

Conceitos bsicos sobre procedures e functions no Delphi

Figura 2: Mensagem exibindo os valores das variveis a e b, usando var Nesse exemplo utilizamos uma function, tambm poderamos usar sem problemas uma procedure at porque no retornamos valor mas sim alteramos o valor da varivel a, isso porque passamos o endereo dessa varivel como parmetro. Ainda usando var podemos passar qualquer tipo objeto como referncia desde componentes da VCL at objetos instanciados a partir de classes criadas por ns mesmos. Existe outra situao muito interessante nos parmetros das procedures que podemos usar com muita eficincia, no incio do artigo mencionei que uma procedure no retorna nenhum tipo de valor, salvo exceo. Essa exceo se aplica ao uso da palavra reservada out. Quando declararmos a palavra out antes do parmetro, estamos indicando que ele vai receber um valor de sada da procedure, mas alguns leitores podem se questionar Procedure no retorna valores!, verdade mas nesse caso estamos declarando que esse parmetro que nada mais que uma referncia a uma varivel, vai receber um determinado valor aps o processamento interno da procedure e consequentemente podemos acess-lo aps a chamada da procedure, acompanhem o exemplo abaixo: Listagem 7: Exemplo de parmetro out

p r o c e d u r eT F o r m 1 . b t n 3 C l i c k ( S e n d e r :T O b j e c t ) ; v a r a ,r e t o r n o :I n t e g e r ;/ / v a r i v e l" r e t o r n o "p a r ac a p t u r a ror e t o r n od ap r o c e d u r e b e g i n / / A t r i b u i1p a r av a r i v e l" a " a: =1 ; / / C h a m aap r o c e d u r eS o m a V a l o r 2ep a s s ac o m op a r m e t r oav a r i v e l" a " / / ec o m op a r m e t r od es a d av a r i v e l" r e t o r n o " S o m a V a l o r 2 ( a , r e t o r n o ) ; / / E m i t im e n s a g e mc o mov a l o rd av a r i v e l" r e t o r n o " S h o w M e s s a g e ( ' V a l o rd av a r i v e l( r e t o r n o ) :'+I n t T o S t r ( r e t o r n o ) ) ; e n d ; p r o c e d u r eT F o r m 1 . S o m a V a l o r 2 ( x :i n t e g e r ;o u ts a i d a :I n t e g e r ) ; b e g i n / / A d i c i o n a1 0 0 0a ov a l o rd e" x " x: =x+1 0 0 0 ; / / A t r i b u iov a l o rd e" x "a op a r m e t r os a i d aq u ef o id e c l a r a d oc o m o" o u t " s a i d a: =x ; e n d ;

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

4/9

01/10/13

Conceitos bsicos sobre procedures e functions no Delphi

Figura 3: Mensagem exibindo o valor da varivel retorno usando out Notem que antes de chamarmos a procedure com parmetro out de retorno temos que declarar uma varivel do mesmo tipo do parmetro, essa varivel vai receber o resultado da procedure, caso fosse atribudo algum valor para varivel retorno antes da chamada da procedure esse valor seria desprezado.

Declarao:
No Delphi todas as procedures e functions so declaradas na seo interface, o programador define o escopo da funo private, public so os mais utilizados, segue exemplo da declarao das functions e procedures desse artigo. Listagem 8: Declarao das functions e procedures

u n i tU P r i n c i p a l ; i n t e r f a c e u s e s W i n d o w s ,M e s s a g e s ,S y s U t i l s ,V a r i a n t s ,C l a s s e s ,G r a p h i c s ,C o n t r o l s ,F o r m s , D i a l o g s ,S t d C t r l s ; t y p e T F o r m 1=c l a s s ( T F o r m ) b t n 1 :T B u t t o n ; b t n 2 :T B u t t o n ; b t n 3 :T B u t t o n ; p r o c e d u r eb t n 1 C l i c k ( S e n d e r :T O b j e c t ) ; p r o c e d u r eb t n 3 C l i c k ( S e n d e r :T O b j e c t ) ; p r i v a t e f u n c t i o nS o m a V a l o r ( x :i n t e g e r ) :I n t e g e r ; f u n c t i o nS o m a V a l o r R e f ( v a rx :i n t e g e r ) :I n t e g e r ; p r o c e d u r eS o m a V a l o r 2 ( x :i n t e g e r ;o u ts a i d a :I n t e g e r ) ; p u b l i c {P u b l i cd e c l a r a t i o n s} e n d ;

Podemos ainda declarar uma function ou procedure dentro de outra procedure, lembrando que ela s ser visvel dentro da procedure de origem, semelhante a escopo das variveis declaradas dentro das procedures s ficam visveis internamente. Desse modo no necessrio declarar na seo interface. Listagem 9: Declarao das functions e procedures dentro de outra procedure

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

5/9

01/10/13
/ / D e c l a r a oi n t e r n ad af u n c t i o n

Conceitos bsicos sobre procedures e functions no Delphi


p r o c e d u r eT F o r m 1 . b t n 4 C l i c k ( S e n d e r :T O b j e c t ) ;/ / P r o c e d u r ep r i n c i p a l f u n c t i o nS o m a r ( a ,b :i n t e g e r ) :I n t e g e r ; b e g i n R e s u l t: =a+b ; e n d ; v a r r e s u l t a d o :I n t e g e r ; b e g i n / / C h a m a n d of u n c t i o ni n t e r n a r e s u l t a d o: =S o m a r ( 1 0 ,2 0 ) ; S h o w M e s s a g e ( ' V a l o rd as o m a :'+I n t T o S t r ( r e s u l t a d o ) ) ; e n d ;

Figura 4: Mensagem utilizando function dentro da procedure

Chamadas:
Para chamar uma function ou procedure muito simples, no caso da function basta digitar o mesmo nome da assinatura da mesma, sendo precedida ou no de parnteses, depende da necessidade de passar parmetros, atribuir o valor de retorno para uma varivel do mesmo tipo de retorno da function. Listagem 10: Chamada de uma function

v a r r e s u l t a d o :I n t e g e r ; b e g i n / / C h a m a n d of u n c t i o n ,p a s s ao sp a r m e t r o sea t r i b u iov a l o rd er e t o r n o r e s u l t a d o: =S o m a r ( 1 0 ,2 0 ) ; S h o w M e s s a g e ( ' V a l o rd as o m a :'+I n t T o S t r ( r e s u l t a d o ) ) ; e n d ;

No caso da procedure, como no existe um valor de retorno basta digitar o mesmo nome da assinatura da mesma, sendo precedida ou no de parnteses, depende da necessidade de passar parmetros. Listagem 11: Chamada de uma procedure

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

6/9

01/10/13
b e g i n

Conceitos bsicos sobre procedures e functions no Delphi


/ / C h a m a n d op r o c e d u r ec o mp a r n t e s e s . E m i t i r M e n s a g e m ( ) ; o u / / C h a m a n d op r o c e d u r es e mp a r n t e s e s . E m i t i r M e n s a g e m ; e n d ;

Bom pessoal, demonstrei nesse artigo princpios bsicos de functions e procedures. Como o nosso Delphi difere alguns conceitos em relao algumas linguagens como Java e C#, sempre bom pegar essas dicas principalmente para quem est chegando no Delphi. Espero que tenham apreciado esse artigo e at a prxima. Abrao...

William
Tcnico em Informtica, atualmente cursando Tecnologia em Anlise e Desenvolvimento de Sistemas. Conhecimentos bsicos nas linguagens Delphi, C#, PHP, Java, JQuery e CSS. Banco de dados Firebird, MySQL, PostgreSQL e SQLServer...

Go s t ei (1)

(0)

2 COMENTRIOS
Marco Antnio Interessante a explicacao. Mas agora dae podemos pensar, se em ambas h a possibiliade de retornar valores, ento qual a necessidade de existir a diferena do nome de ambos mtodos. Foi demonstrado que tanto procedure como a function podem retornar valores, ento no h necessidade de declaraes diferentes, ou a nivel de compilador haveria mais alguma diferena? Eu pelo menos vou passar a adotar somente procedure. Abcs. [h +1 ano] - Responder

[autor] William Ol Marco Antnio, obrigado pelo comentrio! No geral o compilador no faz diferena entre function ou procedure, o plano de execuo de ambas so armazenados em cache, de modo que o desempenho tende a ser o mesmo nos 2 casos. Existem modificaes que podem ser feitas nas diretivas de compilao para melhorar a performance de ambas, mas so melhoras insignificantes. Outro fator que pode ser levado em considerao a manipulao incorreta de strings, que comprovadamente consome recursos do sistema. Finalizando, aconselho o uso de Function para atribuies diretas geralmente em campos ou componentes. Procedure para processamento interno, salvo exceo quando vc j tiver uma varivel pronta para receber seu resultado de processamento a s passar como "out". Espero ter ajudado. Abrao ... [h +1 ano] - Responder

+Delphi
Publicidade

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

7/9

01/10/13

Conceitos bsicos sobre procedures e functions no Delphi

Servios
Inclua um comentrio Adicionar aos Favoritos Marcar como lido/assistido Incluir anotao pessoal Verso para impresso

Mais posts
Video aula

Tipos de parmetros (Valor e Referncia) - Curso Delphi para Iniciantes - 43


Video aula

Escopo Local, Result, Self e Constantes Tipificadas - Curso Delphi para Iniciantes - 42
Video aula

Declarao Forward, Initializaztion e Finalization - Curso Delphi para Iniciantes - 41


Video aula

Sees Interface e Implementation de uma Unit - Curso Delphi para Iniciantes - 40


Revista

Revista ClubeDelphi 153


Video aula

Roles e Autorizao (aplicao cliente) - Curso de Multicamadas com Delphi e DataSnap - 34


Video aula

Roles e Autorizao (aplicao servidora) - Curso de Multicamadas com Delphi e DataSnap - 33


Video aula

Gravando e recuperando dados em Session - Curso de Multicamadas com Delphi e DataSnap - 32

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

8/9

01/10/13
Video aula

Conceitos bsicos sobre procedures e functions no Delphi

Introduo Sessions - Curso de Multicamadas com Delphi e DataSnap - 31


Artigo

Uso de Voz em Delphi


Listar mais contedo

DevMedia | Anuncie | Fale conosco Hospedagem web por Porta 80 Web Hosting

2013 - Todos os Dire itos R e se rvados a web-03

www.devmedia.com.br/conceitos-basicos-sobre-procedures-e-functions-no-delphi/25303

9/9

You might also like