Função

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

david.miguel
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 07 Jul 2005 11:50

Função

Mensagem por david.miguel »

Ola a todos,

Quero criar uma funcao que ira execultar as minhas funcao.
Segue exemplo:

If ExistFuncao("Qualquer_Funcao")
ExeculteFuncao("Qualquer_Funcao")
Endif

Obrigado
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado Colega

Não sei se entendi direito, vc poderia ser mais explicíto ?

No aguardo.

:xau

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
david.miguel
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 07 Jul 2005 11:50

Mensagem por david.miguel »

Queria algo como um ExecBlock da funcao, aonde eu passo o nome da funcao e a funçao é execultada.

Espero que assim fique mais claro.

Antigamente utilizava algo como Eval, Aeval ou DbEval, mas me deu um branco e nao lembro de + nada.
Avatar do usuário
software_facil
Usuário Nível 3
Usuário Nível 3
Mensagens: 211
Registrado em: 23 Fev 2005 12:19
Localização: Curitiba/PR
Contato:

Mensagem por software_facil »

Prezado,

Partindo do fato que a roda já foi inventada, o melhor a fazer é usá-la, busque pela internet ou em literatura própria (livros) sobre code blocks.

Abraços
messenger : software_facil@hotmail.com
Jorge Adourian
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 05 Jul 2004 23:38
Localização: São Paulo-SP-Brasil
Contato:

Mensagem por Jorge Adourian »

Prezado, pensanso assim...Para que existe o Fórum ??????????????????????


Uma forma de fazer isto, seria receber um parametro chamado bloco e rodar ele se existir. Exemplo:

Código: Selecionar todos

IF .NOT. bloco==NIL
 EVAL(bloco)
ENDIF
Até...
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: Função

Mensagem por Stanis Luksys »

Olá,
david.miguel escreveu: If ExistFuncao("Qualquer_Funcao")
ExeculteFuncao("Qualquer_Funcao")
Endif
Só por curiosidade, qual seria a diferença entre chamar ExecuteFuncao(funcao) e funcao() ??

Se a questão for apenas testar a existencia da função eu faria como nosso amigo indicou, atribuindo a funçao a um Code Block. Aí bastaria usar Eval.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Visitante

Mensagem por Visitante »

Caro David...

Eu, pra ser sincero, não entendi nada do que você quer...

Você quer saber se a função existe? e isso em run-time?

Independente da forma, vc tem os fontes, e através deles você saberá se a função existe ou não...

Porque eu faria:
If existeFunco("CriaCadastro")
executa("CriaCadastro")
Endif

Se com base nos meus fontes eu tenho a plena certeza se CriaCadastro Existe ou não?

Seria o mesmo que fazer:
If 0=0
executa
endif

ou

if 0=5
executa
endif

Posso até crer que você possa querer disparar funções aleatórias de acordo com um pedido do usuário, mas verificar se ela existe é meio esquisito, não?

Se o seu problema está no input que esse usuário irá fazer, simplesmente crie um array com as funções que estão disponíveis e faça um achoice ou ligue cada função a um grupo de teclas através do set key.

Não sei se é realmente isso que você quer, mas estou tentando entender o que se passa... e pelo que pude entender, uma das formas mais normais de se fazer é assim.


Um Clip Abraço!
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Eu também ainda não consegui entender, ora se está nos fontes ela existe, senão não.
Você poderia explicar o motivo porque quer fazer isto, talvez haja um meio menos "diferente" de fazer o que você quer.

:% :)´

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Pode não ser o que estou pensando, eu tenho um problema sério que não vi ainda uma forma legal de resolver, atualmente tenho um programa comercial (Programa Padrão) em fase de desenvolvimento, em paralelo estou desenvolvendo um programa especifico para uma Transportadora, quando iniciei o programa para transportadora tive que copiar algumas funções do meu programa Comercial para o programa de Transportadora, a forma que eu achei de fazer isto, foi criando um diretório separado chamado Transpor e refazer os PRG'S novamente de acordo com as exigências da Transportadora, assim muitas vezes tém uma chamada de Função que ainda não existe, ou seja, existe mas está no Diretório do Programa Comercial, então dá a tela Vermelha de erro e o programa é abortado, seria talvez para não abortar o programa?
Independente disto, gostar de saber qual a melhor maneira de fazer isto? Como proceder o desenvolvimento de Programas com Segmento diferentes? Cada um em seu diretório? Cada um é um projeto?
Abraços,
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado Marcos

Eu geralmente copio tudo para um novo diretório, pois acho muito mais fácil de gerenciar, porém as funções genéricas coloco-as todas em uma lib e desta forma ficam disponiveis para qualquer sistema.

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
david.miguel
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 07 Jul 2005 11:50

Mensagem por david.miguel »

O que quero fazer é criar um programa aonde nele tenha pontos aonde o meus clientes poderao criar certas rotinas para modificar o processo original do programa. E para isso eu preciso sempre verificar se estas rotinas estao ou nao no projeto. Elas podem ser chamadas se existirem, mas caso contrario, nao.

Vou tentar com o Eval. Mas queria a sintaxe dele e um exemplo se possivel ?

Outra coisa, vi que nos programas gerados pelo o Miro ou Gaspro, ele tem um gerador de relatorios aonde o usuario pode estar criando estes relatorios. Alguem sabe como ele faz para ler os dados que foram configurados para este relatorios ?

Obrigado
Jorge Adourian
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 05 Jul 2004 23:38
Localização: São Paulo-SP-Brasil
Contato:

Mensagem por Jorge Adourian »

Caros Colegas, pode até não ser o que o que o David queria, mas a minha resposta se baseia na seguinte situação:

OBS: Explico isto porque estou vendo que ningúem entendeu o porque alguem precisaria saber se um bloco existe ou não e se existir rodar ele.

Isto se usa muito (eu uso muito) quando se cria uma função genérica (normalmente se coloca ela numa LIB particular) para ser usada por vários Programas. Ocorre que cada Programa tem necessidades próprias e ao mesmo tempo necessidades comuns. A função genérica faz toda a parte comum e recebe um bloco (ou mais) (com ou sem parametros) para sua necessidade particular.

Exemplo real: Na função DBEDIT existe um parametro OPCIONAL que é o nome da função do usuário, pois bem é exatamente ai que se usa este tal IF sugerido para ver se foi passado o parametro OPCIONAL.

Apenas que, como o DBEDIT é uma função de compatibilidade ela ainda usa nome de função tipo Caracter e não Bloco de Código, o que não é mais recomendado hoje em dia.

Acredito que depois disto ficará mais claro o porque da questão.
Até...
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Ah !

Agora !

Agora é que eu não entendi nada mesmo !

:xau

Desisto desse tópico...

Fui...
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

:-O

uahuahahuahushauhhau
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Função

Mensagem por anacatacombs »

Peraí.
Dexa eu ver se entendi..
Tá lá o cliente....
E o cliente pode criar funções que, de algum modo, podem modificar o funcionamento do programa?
E antes de executar a tal da função, tu precisa saber se ela existe?
é isso?
O.o
Responder