Verificação de tipos (Isso existe ?)

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

Moderador: Moderadores

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Verificação de tipos (Isso existe ?)

Mensagem por Vlademiro »

Pessoal, hoje me deparei com essa pagina :

https://pt.wikipedia.org/wiki/Harbour_(compilador)

Que tem o seguinte trecho que nos diz que podemos inicializar variáveis restringindo o tipo delas, conforme o exemplo abaixo :

Código: Selecionar todos


local a as integer, b as character
a = 1
b = 2 //erro em tempo de compilação se a opção de verificação estática de tipos estiver ligada
b = "x"
? a + b //também gerará erro em tempo de compilação


Ele diz que é uma característica que o Harbour pegou do Visual Objects.
Mas fui testar aqui e não funcionou. Queria entender esse novo recurso, se é que ele existe ou se existiu algum dia e foi retirado.

No texto diz : "erro em tempo de compilação se a opção de verificação estática de tipos estiver ligada"
Alguém sabe como ativar essa "verificação estática" ?

Procurei em outros docs mas parece que nem existe isso, ou se existe é um recurso pouco usado. Mas eu penso que esse recurso pode ajudar a programar com uma segurança maior no código.

Alguém já viu isso funcionando ?
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Verificação de tipos (Isso existe ?)

Mensagem por Pablo César »

Eu não estou sabendo se isso procede. Realmente para mim isso não existe em Harbour.
Nesse link do Wikipédia menciona que ocorre erro em tempo de compilação se a opção de verificação estática de tipos estiver ligada e não orienta qual seria essa configuração de compilação.

O que eu sempre achei é que essa verificação de tipos é feito em tempo de execução e não de compilação. Talvez eu não esteja sabendo, o que seria ótimo saber e dar a conhecer. Em outras linguagens como Java isso sim ocorre. Mas como Harbour é feito em C possivelmente isso possa vir a ter como opção.

Já na versão em inglês: https://en.wikipedia.org/wiki/Harbour_( ... data_types não menciona isso.

Ahh ia esquecendo... onde diz local a as integer em https://pt.wikipedia.org/wiki/Harbour_( ... a_de_Tipos deve ser trocado por:

local a as numeric

Eu corrigi isso no Wikipédia, assim como também na versão em inglês onde mencionava "number" (aff)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Verificação de tipos (Isso existe ?)

Mensagem por asimoes »

Assim funciona:

O harbour aceita essa sintaxe

local a as numeric, b as string

Mas não dá erro de compilação e nem de execução

com

b = 2
►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

Verificação de tipos (Isso existe ?)

Mensagem por JoséQuintas »

Que eu saiba, isso funciona com classe, mas só dá erro em run-time, o que não ajuda.

Mas esse fonte dá erro se compilado com -w3 -es2, porque tem duas atribuições a B, o que torna uma delas inútil.
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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Verificação de tipos (Isso existe ?)

Mensagem por alxsts »

Olá!

Existe e funciona tanto no Harbour padrão quanto no fork. Ajuda a prevenir vários erros, mesmo funcionando apenas em tempo de compilação. Esta "opção de verificação estática de tipos estiver ligada" se refere às opções de compilação -w3 e -w4. Para funcional tem que usar uma delas na compilação.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Verificação de tipos (Isso existe ?)

Mensagem por Jairo Maia »

Olá Pessoal,

Usando w3 e s2 nem compila. Dá erro na linha das declarações das variáveis locais. Sem s2 compila sem problemas e nada muda, ambas variáveis são de conteúdo numéricos. Usando w4 diz que essa opção (w4) é inválida:

Código: Selecionar todos

Function Main()
  Local a as string, b as numeric
 
  Clear Screen
 
  a=111111111
  b=222222222
 
  ? a
  ? ValType( a )
  ?
  ? b
  ? ValType( b )
  Inkey(0)

Return Nil
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Verificação de tipos (Isso existe ?)

Mensagem por JoséQuintas »

O que mencionei:

Código: Selecionar todos

PROCEDURE Main

   LOCAL A AS String

   A := 1
   A := "B"
   ? A
   RETURN

Código: Selecionar todos

d:\temp>hbmk2 test -w3 -es2 -rebuild
hbmk2: Processing environment options: -comp=msvc
hbmk2: Compiling Harbour sources...
Harbour 3.4.0dev (afd46cb) (2016-07-30 10:05)
Copyright (c) 1999-2016, https://github.com/vszakats/harbour-core/
Compiling 'test.prg'...
test.prg(9) Warning W0032  Variable 'A' is assigned but not used in function 'MAIN(5)'
Isso é porque tem A=1 e A="B", um anula o outro, então não tem sentido deixar o primeiro.
O primeiro acaba sendo uma espécie de lixo para o fonte.

Não deu erro a declaração como string, mas não consegui nada extra com ela.
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
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Verificação de tipos (Isso existe ?)

Mensagem por Vlademiro »

Postei a dúvida no fórum de desenvolvedores. Acho que só quem "meche" diretamente com a linguagem pode tirar essa dúvida.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Verificação de tipos (Isso existe ?)

Mensagem por Vlademiro »

Postei em Harbour developers, obtive a seguinte resposta abaixo :



Hello,


Harbour only accepts LOCAL A AS Character syntax, but runtime type
checking is not implemented.


Regards,
Mindaugas
Responder