Página 1 de 1

Métodos estáticos em Harbour

Enviado: 10 Mai 2019 13:23
por André Corrêa
Boa tarde,

Existe algum meio de criar ou simular em Harbour o conceito de MÉTODO ESTÁTICO?
Em outras linguagens, usa-se esse modificador para indicar que um método pertence à CLASSE e não à variável de instância.
Isso permite acessá-lo sem a necessidade de instanciar um objeto dessa classe.
Pesquisei e testei bastante, mas não encontrei nada a respeito em Harbour.

Obrigado,

Métodos estáticos em Harbour

Enviado: 10 Mai 2019 13:35
por asimoes

Métodos estáticos em Harbour

Enviado: 10 Mai 2019 14:56
por André Corrêa
asimoes,

Agradeço pelo link, mas já tinha lido essa documentação, assim como as dos sites abaixo, mas não encontrei nada a respeito dos
métodos estáticos, será que deixei passar algo?

https://www.kresin.ru/en/manuals.html
http://harbourlanguage.blogspot.com/
http://www.marinas-gui.org/projects/harbour_manual/
https://harbour.github.io/doc/
https://vivaclipper.wordpress.com/?s=harbour

Alguém poderia explicar ou confirmar se existe a possibilidade de criar um método estático em Harbour?

Obrigado,

Métodos estáticos em Harbour

Enviado: 10 Mai 2019 15:49
por André Corrêa
A solução é mais simples do que havia pensado e não utiliza o modificador STATIC.
Basta declarar o método com escopo público e acessá-lo usando o nome da classe, com parêntesis, conforme abaixo.

Código: Selecionar todos

CLASS TMyClass

  PUBLIC:
    METHOD meuMetodo()

ENDCLASS

METHOD meuMetodo() CLASS TMyClass
RETURN "MÉTODO ESTÁTICO"

// para chamar o método sem instanciar a classe
TMyClass():meuMetodo()

Métodos estáticos em Harbour

Enviado: 10 Mai 2019 18:56
por JoséQuintas
Pergunta estranha.... rs

Isso é normal de qualquer classe, nem precisa declarar público.
De forma reduzida:

Código: Selecionar todos

CREATE CLASS Test
   METHOD Nome() INLINE "Qualquer"
   END CLASS

? Test:Nome()

Métodos estáticos em Harbour

Enviado: 13 Mai 2019 11:48
por André Corrêa
Quintas,

No momento da dúvida, nenhuma pergunta é estranha. Não vim "de mãos vazias",
já tinha pesquisado, só não estava olhando pelo prisma correto para a questão.
Estou voltando a estudar orientação a objetos com Harbour e não me lembrei da
forma correta de chamar o método sem precisar instanciar a classe.
Em outras linguagens, geralmente, é necessário declarar a classe como estática.
Quanto a não precisar do PUBLIC, entendo que é devido a ser o escopo padrão.

De qualquer forma, se chamo assim, não funciona:

Código: Selecionar todos

TMinhaClasse:MeuMetodo()
E assim funciona:

Código: Selecionar todos

TMinhaClasse():MeuMetodo()
Talvez seja uma particularidade da IDE.

Obrigado pelos retornos.

Métodos estáticos em Harbour

Enviado: 13 Mai 2019 14:21
por JoséQuintas
TMinhaClasse:MeuMetodo()

Isso dá erro porque isso indica a variável TMinhaClasse.

TMinhaClasse()

Isso funciona, porque TMinhaClasse() é o nome da classe, e é o que retorna a classe construída e pronta pra uso.

Métodos estáticos em Harbour

Enviado: 13 Mai 2019 15:09
por André Corrêa
JoséQuintas escreveu:TMinhaClasse:MeuMetodo()

Isso dá erro porque isso indica a variável TMinhaClasse.

TMinhaClasse()

Isso funciona, porque TMinhaClasse() é o nome da classe, e é o que retorna a classe construída e pronta pra uso.
Entendi. É que no seu exemplo, ficou Test:Nome(), achei que funcionasse dessa forma aí pra você.

Métodos estáticos em Harbour

Enviado: 13 Mai 2019 15:25
por JoséQuintas
André Corrêa escreveu:Entendi. É que no seu exemplo, ficou Test:Nome(), achei que funcionasse dessa forma aí pra você.
Realmente, meu exemplo tava errado.