Página 1 de 1

Dúvida com a função Empty()

Enviado: 07 Jun 2018 11:33
por Jairo Maia
Olá Pessoal,

Esse exemplo não deveria retornar .F.? Se está correto retornar .T., alguém poderia me explicar porque por favor?

PS: Por via de dúvidas atualizei o Harbour 3.2 com a última atualização:

Código: Selecionar todos

Clear Screen
lExibePdf := .F.
@ 2,2 say Empty( lExibePdf )

Dúvida com a função Empty()

Enviado: 07 Jun 2018 12:00
por janio
Vc esta equivocado, Jairo!

Empty se refere a variavel tipo STRING, se esta vazia ou nao.

Para boolean, como vc fez, vc deve testar se a variavel eh FALSA ou VERDADEIRA

If lExibePdf
info("variavel VERDADEIRA")
Else
Info("variavel FALSA")
Endif

Dúvida com a função Empty()

Enviado: 07 Jun 2018 12:05
por Kapiaba

Código: Selecionar todos

#include "FiveWin.ch"

STATIC lExibePdf := .F.

FUNCTION Main()

   IF EMPTY( lExibePdf )  // .OR. IF .NOT. lExibePdf

      ? lExibePdf

      lExibePdf := .T.

   ENDIF

RETURN NIL

Dúvida com a função Empty()

Enviado: 07 Jun 2018 12:15
por Jairo Maia
Não Janio, não é isso. Mas descobri que se o conteúdo de uma variável lógica for Nil ou .F., retorna .T., acabei de ver no manual, não sabia.

Description:
The function tests if an expression yields an empty value. The status "Empty" exists for all data types, except Code block Object and Pointer. It is commonly used to test if a user has entered data into an input field.

Editado:
O mesmo exemplo, se colocar valor .T. retorna .F. para Empty():

Código: Selecionar todos

Clear Screen
lExibePdf := .T.
@ 2,2 say Empty( lExibePdf )

Dúvida com a função Empty()

Enviado: 07 Jun 2018 12:37
por janio
Ah... que doidera kkkkk

Dúvida com a função Empty()

Enviado: 07 Jun 2018 13:43
por rubens
Estes dias tive mudar umas 3 rotinas por causa disso..Se tivesse lido o manual como o Jairo fez..
Daí tive que mudar para string onde eu comparava 'S' ou 'N'..
:%

Dúvida com a função Empty()

Enviado: 07 Jun 2018 14:11
por asimoes
Empty serve também para testar variável tipo date e array

Dúvida com a função Empty()

Enviado: 07 Jun 2018 15:37
por JoséQuintas
E também numérico, seria empty pra zerado.
Já o array, é novidade.

Esquisito usar Empty() pra boolean, porque se é .T. ou .F., nunca poderia estar vazio, exceto NIL.

Dúvida com a função Empty()

Enviado: 07 Jun 2018 17:42
por asimoes
Quintas,

O nil pode acontecer em uma tabela, exemplo um campo tipo varchar2(1) onde recebe T ou F, mas pode ser null, já peguei essa situação em tabela access de terceiros.

Dúvida com a função Empty()

Enviado: 07 Jun 2018 20:31
por Jairo Maia
Olá Pessoal,

Apenas para deixar registrado:

Empty segundo o manual retorna .T. nas seguintes situações para variáveis dos tipos:

A - Array: Array with zero elements
C - Character: Null string and White space characters (CR/LF, Space(), Tabs)
D - Date: Null date (CTOD(""))
H - Hash: Hash with zero elements
L - Logical: False (.F.). The Logical variable when "Nil" is same False.
M - Memo: Same as character
N - Numeric: The value zero


Não tem efeito (No empty value) para os tipos:

B - Code block
O - Object
P - Pointer


Uma variável lógica pode ter valor Nil ou lógico quando usado em parâmetros. Exemplo:

Código: Selecionar todos

Function GeraDanfePDF( cFile, lExibePdf )
...
lExibePdf := If( lExibePdf = Nil, .T., lExibePdf )  // usei assim para funcionar
...