Página 1 de 1

Class e Function conflitam

Enviado: 11 Mai 2017 11:45
por asimoes
Pessoal,

Essa semana deu um erro bem esquisito:

Temos uma lib que tem uma classe chamada Tela (CREATE CLASS Tela), deu um erro em um sistema de uma equipe que tinha nesse sistema uma function com o mesmo nome da classe, quando a classe era invocada na lib a chamada era para function desse sistema que não tinha as VAR dessa classe, produzindo erro, resumo renomeamos o nome da classe na lib para telacorp para não conflitar.

O que eu entendi foi que a function sobrepos a classe

Class e Function conflitam

Enviado: 11 Mai 2017 12:10
por ANDRIL
Talvez a ordem de compilação interfira, não sei se é seu caso, mais meus PRGs vão sempre no final no script. Por estar esta function no prg pode-se assumir que ela prevaleceu. Embora não deveria ocorrer o problema já que são declarações diferentes.

Class e Function conflitam

Enviado: 11 Mai 2017 12:42
por asimoes
Andril,

A CREATE CLASS Tela está em uma lib e a FUNCTION Tela em um prg da aplicação, a confusão foi quando dentro da lib chamar a classe Tela

A chamada da classe Tela é feita dentro da própria lib

oTela:=Tela():New() que chamou a FUNCTION Tela() da aplicação bug ou é outra coisa ?

Class e Function conflitam

Enviado: 11 Mai 2017 12:50
por JoséQuintas
Acho que isso é normal.

Já deve ter percebido que minhas classes tem a terminação Class, que evita esse problema.

Por exemplo, SefazClass()

A sugestão é trocar o nome pra TelaClass(), e não precisar se preocupar.

Ou em certos casos, até iniciais, como acontece em HMG_funcao(), RMC_ do RMChart, hb_ do Harbour, etc.
Dependendo do quanto a função/classe vai se "espalhar", é bom um nome único.
É diferente usar alguma coisa num único aplicativo, em vários, no mundo inteiro, ou até misturando linguagens de programação, como DLLs.
Chega uma hora que os nomes acabam.... rs

Class e Function conflitam

Enviado: 11 Mai 2017 12:59
por JoséQuintas
Tem outra alternativa:
Não lembro detalhes, mas seria criar a classe local, e uma função pra criar a variável.

Código: Selecionar todos

oVar := ClasseSimoesTela()
E no fonte da classe local, esta função.

Código: Selecionar todos

FUNCTION ClasseSimoesTela()
   LOCAL oVar
   oVar := Tela():New()
   RETURN oVar
Teria que pesquisar, porque sei que isso existe, mas não lembro qual a declaração pra classe ser local.

Class e Function conflitam

Enviado: 11 Mai 2017 14:51
por asimoes
Por hora vou colocar um nome bem específico que eu sei que não será usado em outro prg.