O que Voces Sugerem? Utilizar Comandos ou Funçoes?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Spitzer
Usuário Nível 2
Usuário Nível 2
Mensagens: 60
Registrado em: 15 Ago 2003 04:56
Localização: Nova Fátima - PR

O que Voces Sugerem? Utilizar Comandos ou Funçoes?

Mensagem por Spitzer »

Oi!

(Desculpem, mas sei la porque, estou sem acentuaçao)!

Pessoal, o que voce sugerem para uso do Clipper: Comandos ou suas funçoes equivalentes?

Eu sei que isto vai de cada um, mas, sinceramente, gostaria de ouvir as sugestoes, os pros e os contras.

Particularmente, nao vejo porque utilizar funcoes do Clipper sem anteceder por "alias->". Aih, no meu ponto de vista, o mais pratico e utilizar os comandos mesmo.

Exemplo com "alias->" antes da funcao:

Código: Selecionar todos

WHILE arq1->(!EOF())
   ... processo
   arq2->(DBSEEK(chave))
   ... processo
   arq1->(DBSKIP())
END
Mesmo exemplo acima com comandos:

Código: Selecionar todos

SELECT arq1
WHILE !EOF()
   ... processo
   SELECT arq2
   SEEK chave
   ... processo
   SELECT arq1
   SKIP
END
No primeiro exemplo, o codigo fica mais claro em relacao ao arquivo que esta se efetuando a acao, e nos livramos do comando SELECT.
Em contrapartida, tem algumas funçoes que exigem uma semana de parametros e code blocks (deem uma olhada nas funçoes que substituem os comandos INDEX ON, TOTAL ON, SET RELATION...)!

Compilei algumas linhas com o parametro /p, abri o arquivo .ppo e vejam so o resultado:

Arquivo .prg:

Código: Selecionar todos

INDEX ON campo1 TO arquivo UNIQUE REST ;
      FOR !EMPTY(campo2) ;
      WHILE EMPTY(campo3) ;
      EVAL progr() EVERY LASTREC()/100 DESCENDING

RETURN

FUNCTION progr()

RETURN NIL
Agora vejam a parafernalia do arquivo .ppo:

Código: Selecionar todos

ordCondSet("!EMPTY(campo2)",{||!EMPTY(campo2)},,;
           {||EMPTY(campo3)},{||progr()},;
           LASTREC()/100,RECNO(),,,.T.,.T.)
ordCreate("arquivo",,"campo1",{|| campo1},.T.)

RETURN

FUNCTION progr()

RETURN NIL
Alem de que, algumas funcoes nao sao documentadas.
Eu nao consegui encontrar no NG do Clipper 5.2e a documentacao da funcao "ORDCONDSET()" nem mesmo na seçao "Drivers" do NG.

Desde ja, obrigado a todos que opinarem!
Abraços,
Ademir Spitzer
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

Em nível de execução isso não faz diferença alguma, porém para organização e entendimento do código sim, na minha opnião isso vai do gosto de cada um, mas também depende da função, exemplo :

DBSEEK(MNOME,.T.)

Ou

SET SOFTSEEK ON
SEEK MNOME

Observe que neste caso a função é mais prática e economiza uma linha.

Eu geralmente prefiro usar as funções por achar mais prático.

Vejamos um outro caso :

IF ESCOLHA=1
MMESC="SIM"
ELSE
MMESC="NAO"
ENDIF

ou

MMESC=IF(ESCOLHA=1,"SIM","NAO")

Novamente o uso da função tem um melhor aproveitamento.

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
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Use comandos no trivial, somente use funções para criar suas própiras UDFs, ou seja, suas próprias funções tornado-as mais rápidas para devolução de resultados e suas LIBs menores.

Se um dia voce necessitar de ajuda e enviar um código .PPO, ficará mais demorado para devolver a sua solução.

@braços :?)
Responder