Página 1 de 1
Função Default() na SEFAZCLASS
Enviado: 22 Out 2024 08:57
por jelias
Olá amigos,
Estou fazendo alguns testes e buscando aprendizado com a SEFAZCLASS e me deparei com esta função abaixo que não existe no xHarbour 1.2.1. É uma função nativa do Harbour?
Default( @lAutorizado, .T. )
Código: Selecionar todos
FUNCTION XmlToDoc( cXmlInput, lAutorizado )
LOCAL oDocSped
Default( @lAutorizado, .T. )
Desde já agradeço pela ajuda.
Saudações,
Júlio.
Função Default() na SEFAZCLASS
Enviado: 22 Out 2024 09:19
por alxsts
Olá!
Sim, esta função é do Harbour.
é equivalente ao comando
DEFAULT do xHarbour
Código: Selecionar todos
Default( @lAutorizado, .T. ) ==> DEFAULT lAutorizado TO .T.
É o mesmo que:
Código: Selecionar todos
lAutorizado := If( lAutorizado == NIL, .T., lAutorizado )
// Ou
lAutorizado := If( Hb_IsNIL( lAutorizado ), .T., lAutorizado )
Função Default() na SEFAZCLASS
Enviado: 22 Out 2024 09:58
por jelias
Alexandre,
A função DEFAULT exige que seja passado o parâmetro da variável usando @? Ou se refere ao conteúdo da variável em questão?
Saudações,
Júlio.
Função Default() na SEFAZCLASS
Enviado: 22 Out 2024 10:35
por alxsts
Olá!
Sim, o primeiro parâmetro é passado por referência (@) e é atualizado pela função. Se passar por valor (sem o @), não surtirá efeito.
Código: Selecionar todos
PROCEDURE Teste
LOCAL xVar := NIL
xVar := Default( xVar, "Novo Valor" ) // parâmetro passado por valor
? xVar // ==> NIL
xVar := Default( @xVar, "Novo Valor" ) // parâmetro passado por referência
? xVar // ==> "Novo Valor"
RETURN
Quando se passa um parâmetro por valor, como o próprio nome já diz, é passado o valor do parâmetro. Qualquer alteração deste valor dentro da função que recebeu o parâmetro não reflete no valor contido na variável, dentro da função de origem.
Ao contrârio, quando se parra por referência, é passado o endereço de memória da variável. Alterações da variável na função destino são refletidas no valor contido na variável, na função de origem.
Função Default() na SEFAZCLASS
Enviado: 22 Out 2024 10:43
por JoséQuintas
DEFAULT ? não uso isso.
A que uso é hb_Default()
Melhor criar uma
Código: Selecionar todos
FUNCTION hb_Default( xVar, xValue )
IF ValType( xVar ) != ValType( xValue )
xVar := xValue
ENDIF
RETURN Nil
Seria interessante deixar esse tipo de função em separado, em algum fonte que chame a atenção, nunca se sabe se versões futuras do xharbour vão ter essa função.
Talvez harbour_compat.prg
Comentário adicional:
Isso de trocar pra iif() ou usar um arquivo CH só aumenta o fonte, o risco de erro, e o tamanho do EXE.
Uma vez que muito fonte vai ter hb_Default(), mas prático criar a função.
Faz parte do harbour, tem hb_Default() e hb_DefaultValue() parecidas mas pra uso diferente.
Função Default() na SEFAZCLASS
Enviado: 23 Out 2024 14:30
por SOSSOFT
Eu também acho que hb_default() é a solução.