Página 1 de 1
Verificação de tipos (Isso existe ?)
Enviado: 01 Ago 2016 23:31
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 ?
Verificação de tipos (Isso existe ?)
Enviado: 02 Ago 2016 08:48
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)
Verificação de tipos (Isso existe ?)
Enviado: 02 Ago 2016 10:26
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
Verificação de tipos (Isso existe ?)
Enviado: 02 Ago 2016 17:56
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.
Verificação de tipos (Isso existe ?)
Enviado: 02 Ago 2016 19:11
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.
Verificação de tipos (Isso existe ?)
Enviado: 02 Ago 2016 19:39
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
Verificação de tipos (Isso existe ?)
Enviado: 02 Ago 2016 20:05
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.
Verificação de tipos (Isso existe ?)
Enviado: 02 Ago 2016 22:26
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.
Verificação de tipos (Isso existe ?)
Enviado: 03 Ago 2016 09:52
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