Página 1 de 1

Funções pra gets

Enviado: 12 Ago 2013 15:40
por JoséQuintas
Tem horas que precisamos algo mais nos gets.
Seguem algumas com exemplo de uso

Código: Selecionar todos


@ 1, 2 GET nValor VALID True( nTotal := nValor * 1.5 )

FUNCTION True( ... )
   RETURN .t.

// se preferir

@ 1, 2 GET nValor VALID Calculo( nValor * 1.5, @nTotal )

FUNCTION Calculo( xValue, xVariable )
   xVariable := xValue
   RETURN .t.

// pra desabilitar um get sem o When (obrigando a passar pelo campo/validação)

@ 1, 1 GET xVar WHEN GetDisable()

FUNCTION GetDisable()
   KEYBOARD Chr( iif( LastKey() == K_UP, K_UP, K_ENTER ) ) // repete navegação em andamento
   RETURN .t.

Funções pra gets

Enviado: 21 Set 2013 15:19
por JoséQuintas
Hoje pensei nesta, pode equivaler a todas juntas.

Código: Selecionar todos

FUNCTION ReturnValue( xValue, ... )
   RETURN xValue
Num valid com muitos cálculos:

Código: Selecionar todos

@ 5, 5 GET nValor VALID ReturnValue( .t., nIcms := nValor * 0.18, nIpi := nValor * 0.10, nPis := nValor * 1.65, nCofins := nValor * 7.6 )
ou

Código: Selecionar todos

cTxt := ReturnValue( "", Encontra( cCodigo, "jpcadas", "numlan" ) ) + jpcadas->cdCodigo
A do valid fica mais interessante do que usar vários vcalc()
E a outra, pode substituir meus iif( Encontra( cCodigo, "jpcadas", "numlan" ), "", "" ) + jpcadas->cdCodigo

Importante: não se pode esquecer que a compilação faz otimização de código.
No caso de um .AND. / .OR. , se na execução um retornar falso, a execução não verifica o restante do valid.
Só tomar cuidado com a ordem do valid.

Funções pra gets

Enviado: 22 Set 2013 10:21
por Maligno
No caso de um .AND. / .OR. , se na execução um retornar falso, a execução não verifica o restante do valid.
Isso se chama "avaliação de curto-circuito", desligável em alguns compiladores. Mas não no Clipper. Provavelmente no [x]Harbour também não. Portanto, é bom lembrar que não se pode esquecer de forçar o teste de todas as expressões antes da finalização, já que a última expressão concatenada, poucas vezes atingível, pode esconder um erro. Pela "Lei de Murphy", erro desse tipo só aparece na cara do cliente. :)

Funções pra gets

Enviado: 22 Set 2013 10:30
por JoséQuintas
Só corrigindo, dá pra desligar no Clipper e Harbour, usando /z :

/z suppress shortcutting (.and. & .or.)

Eu até fazia isso antigamente no Clipper. Mas evitar que o programa faça as coisas mais rápido é esquisito.