Try e Finally no DELPHI
Olá pessoal alguém poderia explicar,
com qual finalidade eu,
uso o Try / Finally
com qual finalidade eu,
uso o Try / Finally
Gustavo Fernandes
Curtidas 0
Melhor post
Tiago
22/10/2012
Boa tarde, o try é um bloco de comandos que você quer que determinadas operações sejam feitas. Já o finaly é um bloco de comandos que você utiliza para terminar determinado procedimento. Um exemplo cálculo de média:
Espero ter ajudado
try{
nota1=5
nota2=5
media=(5+5)/2
}
finaly{
imprimir("A média é :" +media)
}
Espero ter ajudado
GOSTEI 1
Mais Respostas
Alessandro Yamasaki
22/10/2012
Tratamento de exceções
GOSTEI 0
Jurandi Frade
22/10/2012
Tratamento de exceções é através de
Try
Except
On E: except // caso vc queira saber a exceção
End;
E
Try
Finally
End;
vc usa quando quer que uma determinada ação sempre ocorra ao final de um procedimento.
Ex:
Try
TextoHeader := TRichEdit.Create(Self);
....
....
Finally
Textheader.free;
End;
Espero ter ajudado.
Sds,
Try
Except
On E: except // caso vc queira saber a exceção
End;
E
Try
Finally
End;
vc usa quando quer que uma determinada ação sempre ocorra ao final de um procedimento.
Ex:
Try
TextoHeader := TRichEdit.Create(Self);
....
....
Finally
Textheader.free;
End;
Espero ter ajudado.
Sds,
GOSTEI 0
Alisson Santos
22/10/2012
Esse tipo de tratamento você pode estar fazendo sempre que achar que aquele código que está desenvolvendo pode dar algum erro, independente do erro que ocorrer ele vai executar o finally.
GOSTEI 0
Gustavo Fernandes
22/10/2012
Agradeço pela atenção galera.
Só mais uma pergunta eu, estou montando
meu, bloco da seguinte maneira abaixo.
Application.CreatForm(TF_Form1, F_Form1)
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
FreeAndNil(F_Form1)
end;
Neste Bloco tem como utilizar o Except junto com finally ?
pois quando tento da erro, logicamente acabo optando um deles.
Só mais uma pergunta eu, estou montando
meu, bloco da seguinte maneira abaixo.
Application.CreatForm(TF_Form1, F_Form1)
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
FreeAndNil(F_Form1)
end;
Neste Bloco tem como utilizar o Except junto com finally ?
pois quando tento da erro, logicamente acabo optando um deles.
GOSTEI 0
Claudia Nogueira
22/10/2012
Está estranho você usar um Release depois do ShowModal, isso não é necessário.
Quando tem algum retorno depois do ShowModal, quer dizer que a tela já foi fechada.
Pra criar/abri um form eu simplesmente faço dessa maneira:
Se você deixa seus Forms criando automaticamente no projeto (não é aconselhado), aí ficaria somente assim:
Em todo caso, respondendo sua dúvida, se é possível usar o except com o finally, sim é possível, veja o exemplo:
Quando tem algum retorno depois do ShowModal, quer dizer que a tela já foi fechada.
Pra criar/abri um form eu simplesmente faço dessa maneira:
Application.CreateForm(TF_Form1, F_Form1); F_Form1.ShowModal; FreeandNil(F_Form1);
Se você deixa seus Forms criando automaticamente no projeto (não é aconselhado), aí ficaria somente assim:
F_Form1.ShowModal;
Em todo caso, respondendo sua dúvida, se é possível usar o except com o finally, sim é possível, veja o exemplo:
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
try
FreeAndNil(F_Form1)
except
end;
end;
Agradeço pela atenção galera.
Só mais uma pergunta eu, estou montando
meu, bloco da seguinte maneira abaixo.
Application.CreatForm(TF_Form1, F_Form1)
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
FreeAndNil(F_Form1)
end;
Neste Bloco tem como utilizar o Except junto com finally ?
pois quando tento da erro, logicamente acabo optando um deles.
Só mais uma pergunta eu, estou montando
meu, bloco da seguinte maneira abaixo.
Application.CreatForm(TF_Form1, F_Form1)
try
F_Form1.ShowModal;
F_Form1.Realese;
finally
FreeAndNil(F_Form1)
end;
Neste Bloco tem como utilizar o Except junto com finally ?
pois quando tento da erro, logicamente acabo optando um deles.
GOSTEI 0
Marco Salles
22/10/2012
Hummm , a dúvida dele não é se pode usar mas qual usar e qual a diferença entre os blocos
primeiro lugar sua estrututa de instanciação não é recomendada e ja tive relatos de inumeros erros com ela
Veja o Link , onde aparentemente nada de anormal ao utilizar o Application.createForm
http://forum.devmedia.com.br/viewtopic.php?t=79822&highlight=application+createform
Nesta estrutura o Proprietário do Form é do Objeto application .. È dele a responsabilidade de desalocar a memória de
destruir a instancia do form ... Ma logo abaixo vc da um FreeAndNil(F_Form1) o que é incoerente com o próposito . Logo
descarte a utilização desta estrutura (no meu ponto de vista)
2)Segundo lugar como a amiga Claudiadnh relatou
Não so é estranho como não se aplica utilizar o release neste arquitetura . As bigrafias do delphi comentam sobre o release mas ela geralmente é utilizado dentro do próprio form e não fora dele ... Aqui vc esta instanciando um form a partir da uses (do form Principal) e portanto o release não se aplica ... O freeandnil ou em alguns casos (depende do escopo da variável Form) o simples free resolve
3)Agora sua dúvida quanto o try excpet ou try finally é simples .... o try finaly sempre indepedemente de ocorre ou não
uma exceção o Finally sera sempre executado e o excpet depende de ocorrer a exceção
então vejamos
O último detalhe que pode paraecer despercebido (utilizo como critétio pessoal para conhecer o nivel do programador)
é se o try esta antes ou depois do F_Form1:=TF_Form1.create(nil);
Vejo em algumas revistas em alguns códigos de artigos conceituados a má aplicação desta ordem . De cara fico com receio de
continuar a leitura , pois é um básico que não pode ser deixado de mão em quem quer forma opinição . Logo o Try fica após
o F_Form1:=TF_Form1.create(nil); porque subtende-se que caso ocorra algum erro interno ou fora do nosso controle o próprio
delphi desaloca a memória e a instrução Finally não é executada
desculpe o testamento , mas se vc ler com atenção dificilmente vc terá problemas com isto [[sds e um abraço amigo
primeiro lugar sua estrututa de instanciação não é recomendada e ja tive relatos de inumeros erros com ela
Application.CreatForm(TF_Form1, F_Form1) try F_Form1.ShowModal; F_Form1.Realese; finally FreeAndNil(F_Form1) end;
Veja o Link , onde aparentemente nada de anormal ao utilizar o Application.createForm
http://forum.devmedia.com.br/viewtopic.php?t=79822&highlight=application+createform
Nesta estrutura o Proprietário do Form é do Objeto application .. È dele a responsabilidade de desalocar a memória de
destruir a instancia do form ... Ma logo abaixo vc da um FreeAndNil(F_Form1) o que é incoerente com o próposito . Logo
descarte a utilização desta estrutura (no meu ponto de vista)
2)Segundo lugar como a amiga Claudiadnh relatou
Está estranho você usar um Release depois do ShowModal, isso não é necessário.
Quando tem algum retorno depois do ShowModal, quer dizer que a tela já foi fechada.
Pra criar/abri um form eu simplesmente faço dessa maneira:
Quando tem algum retorno depois do ShowModal, quer dizer que a tela já foi fechada.
Pra criar/abri um form eu simplesmente faço dessa maneira:
Não so é estranho como não se aplica utilizar o release neste arquitetura . As bigrafias do delphi comentam sobre o release mas ela geralmente é utilizado dentro do próprio form e não fora dele ... Aqui vc esta instanciando um form a partir da uses (do form Principal) e portanto o release não se aplica ... O freeandnil ou em alguns casos (depende do escopo da variável Form) o simples free resolve
3)Agora sua dúvida quanto o try excpet ou try finally é simples .... o try finaly sempre indepedemente de ocorre ou não
uma exceção o Finally sera sempre executado e o excpet depende de ocorrer a exceção
então vejamos
F_Form1:=TF_Form1.create(nil); try F_Form1.ShowModal; //supor outras instruções passiveis de erros como valiaçoes , formatações enfim -->> Aqui cabe um try excpet try //codigo que deve ser tratado caso aja uma exceção excpet //blablablabla end; finally //Vc deve utilizar o Finally pq vc quer indepemente de ocorrer ou não a exceção liberar a memória FreeAndNil(F_Form1); //ou F_Form1.free para variáveis locais conforme comentado acima end; end;
O último detalhe que pode paraecer despercebido (utilizo como critétio pessoal para conhecer o nivel do programador)
é se o try esta antes ou depois do F_Form1:=TF_Form1.create(nil);
Vejo em algumas revistas em alguns códigos de artigos conceituados a má aplicação desta ordem . De cara fico com receio de
continuar a leitura , pois é um básico que não pode ser deixado de mão em quem quer forma opinição . Logo o Try fica após
o F_Form1:=TF_Form1.create(nil); porque subtende-se que caso ocorra algum erro interno ou fora do nosso controle o próprio
delphi desaloca a memória e a instrução Finally não é executada
F_Form1:=TF_Form1.create(nil); // Por alguma razão deu erro aqui -->>> O Próprio delphi se vira para desalocar memória try // blocos abaixo devido ao erro não é executado // finally .....
desculpe o testamento , mas se vc ler com atenção dificilmente vc terá problemas com isto [[sds e um abraço amigo
GOSTEI 0
Gustavo Fernandes
22/10/2012
Desde já,
gostaria agradecer a Claudia e Marco Antonio e entre outros.
Pela atenção dada em relação a minha dúvida, muito obrigado.
gostaria agradecer a Claudia e Marco Antonio e entre outros.
Pela atenção dada em relação a minha dúvida, muito obrigado.
GOSTEI 0