Página 1 de 1
Como seria isto em xharbour ? sem o ...
Enviado: 21 Ago 2025 14:29
por JoséQuintas
Aqui já falaram que usar ... era coisa de preguiçoso.... kkkk
Como faria isso dar certo sem ... ou em xharbour ?
Código: Selecionar todos
#include "hbclass.ch"
PROCEDURE Main
LOCAL oItem
oItem := Test():New()
oItem:One()
oItem:One( Nil )
oItem:Two()
oItem:Two( Nil )
Inkey(0)
RETURN
CREATE CLASS Test
METHOD One( ... ) INLINE ::Two( ... )
METHOD Two( x )
ENDCLASS
METHOD Two( x ) Class test
? PCount(), x
RETURN Nil
resultado desejado, que dá certo com ...
0 NIL
1 Nil
0 Nil
1 Nil
Porque ?
Porque eventualmente quero atribuir NIL, então testar Nil não serve, só contando parâmetros mesmo.
De outra forma, sem o ..., seria impossível.
Como seria isto em xharbour ? sem o ...
Enviado: 21 Ago 2025 14:31
por JoséQuintas
Só de curiosidade, o uso real, que vai crescer muuuuuito...
Código: Selecionar todos
METHOD Name( ... ) SETGET
METHOD Handle( ... ) SETGET
METHOD Type( ... ) SETGET
METHOD ParentHandle( ... ) SETGET
METHOD IsDeleted( ... ) SETGET
METHOD AutoRelease( ... ) SETGET
METHOD ReleaseProcedure( ... ) SETGET
METHOD VirtualHeight( ... ) SETGET
METHOD VirtualWidth( ... ) SETGET
METHOD IsActive( ... ) SETGET
METHOD NotifyIconName( ... ) SETGET
METHOD GraphTasks( ... ) SETGET
ENDCLASS
METHOD Index( ... ) CLASS _hmgFormclass; RETURN ::SetGet( @::_nIndex, ... )
METHOD IsDeleted( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 65, ::_nIndex, ... )
METHOD Name( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 66, ::_nIndex, ... )
METHOD Handle( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 67, ::_nIndex, ... )
METHOD IsActive( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 68, ::_nIndex, ... )
METHOD Type( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 69, ::_nIndex, ... )
METHOD ParentHandle( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 70, ::_nIndex, ... )
METHOD ReleaseProcedure( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 71, ::_nIndex, ... )
METHOD NotifyIconName( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 82, ::_nIndex, ... )
METHOD VirtualHeight( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 91, ::_nIndex, ... )
METHOD VirtualWidth( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 92, ::_nIndex, ... )
METHOD GraphTasks( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 102, ::_nIndex, ... )
METHOD AutoRelease( ... ) CLASS _hmgFormclass; RETURN ::SetGetSYSDATA( 105, ::_nIndex, ... )
// another to set Nil
METHOD SetGetSYSDATA( nData, nIndex, xValue ) CLASS _hmgFormclass
IF pCount() > 2
_HMG_SYSDATA[ nData, nIndex ] := xValue
ENDIF
RETURN _HMG_SYSDATA[ nData, nIndex ]
Como seria isto em xharbour ? sem o ...
Enviado: 21 Ago 2025 14:38
por JoséQuintas
Pra quem não conhece esse uso:
SETGET é pra usar o método ("função") como se fosse variável.
Ao invés de:
Usar uma rotina é útil, por exemplo pra validar parâmetros.
No meu caso, por enquanto foi pra reduzir a quantidade de rotina repetida.
Mas posso dividir em rotina pra validar número, string, array, etc.
Infelizmente, SETGET e INLINE não funcionam juntos, senão seria tudo na linha de cima.
Como seria isto em xharbour ? sem o ...
Enviado: 21 Ago 2025 15:02
por JoséQuintas
Faltou dizer....
Eu não sabia disso.
Perguntei no harbour-users, e Przemek mostrou a solução.