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

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

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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

Mensagem 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 )
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

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

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

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

Mensagem 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
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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

Mensagem 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 )
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

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

Mensagem por janio »

Ah... que doidera kkkkk
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

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

Mensagem 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'..
:%
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

Empty serve também para testar variável tipo date e array
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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

Mensagem 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
...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder