Página 1 de 1

Duvida Sobre Classe - 'INLINE' ?

Enviado: 29 Abr 2012 15:05
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.

Duvida Sobre Classe - 'INLINE' ?

Enviado: 01 Mai 2012 12:07
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.

Duvida Sobre Classe - 'INLINE' ?

Enviado: 03 Mai 2012 12:50
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.