Duvida Sobre Classe - 'INLINE' ?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

mateus301
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 24 Mar 2012 12:47
Localização: marialva/pr

Duvida Sobre Classe - 'INLINE' ?

Mensagem por mateus301 »

Código: Selecionar todos

#include "hbclass.ch"

CLASS GarrafaDeCerveja

   EXPORTED:

   METHOD abre()      INLINE ::lFechada := .F.
   METHOD esquentar() INLINE ::lGelada  := .F.
   METHOD resfriar()  INLINE ::lGelada  := .T.
   METHOD isFechada() INLINE ::lFechada
   METHOD isGelada()  INLINE ::lGelada

   HIDDEN:

   VAR lFechada AS LOGICAL INIT .T.
   VAR lGelada  AS LOGICAL INIT .F.

ENDCLASS
-----------------------
Minha duvida é oque o INLINE representado acima faz ?
Ele só tem um objetivo ? Ou pode ser usados para outras coisas ?

Agradeco desde já, Obrigado.
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

Duvida Sobre Classe - 'INLINE' ?

Mensagem por vailton »

Boa tarde.

O "inline" citado acima é um recurso disponível para que, ao criar um método na classe, o programador já possa codificar a implementação do mesmo. Deste modo, você consegue diminuir a quantidade de linhas do seu código e ainda assim, facilitar (ou não) a leitura do mesmo.

Se pegarmos o trecho citado:

Código: Selecionar todos

METHOD abre()      INLINE ::lFechada := .F.
METHOD esquentar() INLINE ::lGelada  := .F.
METHOD resfriar()  INLINE ::lGelada  := .T.
Poderíamos escreve-lo também do seguinte modo:

Código: Selecionar todos

METHOD abre()
METHOD esquentar()
METHOD resfriar()
...
ENDCLASS

METHOD abre() CLASS GarrafaDeCerveja
 ::lFechada := .F.
 RETURN 

METHOD esquentar() CLASS GarrafaDeCerveja
 ::lGelada := .F.
 RETURN 

METHOD resfriar() CLASS GarrafaDeCerveja
 ::lGelada := .T.
 RETURN 
Note como as 3 (três) linhas acima utilizando INLINE tornam o código menor e ainda agilizam a leitura do mesmo, já que o programador não precisa procurar em outra parte do código pela sua implentação.

Espero ter ajudado.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Duvida Sobre Classe - 'INLINE' ?

Mensagem por Stanis Luksys »

Olá,

É exatamente como o Vailton descreveu.

Este recurso é bastante utilizado quando você tem uma propriedade que é protegida dentro da classe, mas quer permitir que ela seja alterada em tempo de execução. Por exemplo:

Código: Selecionar todos

CLASS NomeDaClasse
   
   PROTECTED:
      VAR cText
      VAR nNumber

   EXPORTED:
      METHOD setText(c)    INLINE  ::cText   := AllTrim( c )
      METHOD setNumber(n)  INLINE  ::nNumber := Round( n, 2 )

END CLASS
Muitas classes em várias linguagens funcionam assim.

É interessante, porque você abre a possibilidade de alterar a propriedade, mas por um único caminho, e pode tratar que tipo de informação está chegando nela, como no exemplo, o alltrim() e o round().

Abraços.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder