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
xmltodoc.png
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.