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: 267
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: 3107
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: 267
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: 3107
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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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

Função Default() na SEFAZCLASS

Mensagem por SOSSOFT »

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