Função Default() na SEFAZCLASS

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

Moderador: Moderadores

jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Função Default() na SEFAZCLASS

Mensagem 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.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Função Default() na SEFAZCLASS

Mensagem 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 )
[]´s
Alexandre Santos (AlxSts)
jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Função Default() na SEFAZCLASS

Mensagem 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.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Função Default() na SEFAZCLASS

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Função Default() na SEFAZCLASS

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
SOSSOFT
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 23 Out 2024 10:04

Função Default() na SEFAZCLASS

Mensagem por SOSSOFT »

Eu também acho que hb_default() é a solução.
Responder