1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

&ELSEIF

Discussão em 'Comandos Básicos' iniciado por fdantas, Março 13, 2009.

  1. fdantas

    fdantas Administrator Moderador

    /******************** STATEMENTS**************************************
    **
    ** &IF, &THEN, &ELSEIF, &ELSE, &ENDIF
    **
    ** &MESSAGE
    **
    ** &OPSYS
    **
    ** &WINDOW-SYSTEM
    **
    **********************************************************************/
    Código:
    &IF "{&OPSYS}" = "msdos"  &THEN
      &MESSAGE Voce esta em uma plataforma msdos   
      &IF  "{&WINDOW-SYSTEM}" <> "" &THEN
          &MESSAGE A base usada e {&WINDOW-SYSTEM} 
      &ENDIF     
    &ELSEIF "{&OPSYS}" = "unix" &THEN
      &MESSAGE Voce esta em uma plataforma unix     
    &ELSE
      &MESSAGE Voce nao esta em uma plataforma unix ou msdos 
    &ENDIF
    
  2. muertebr

    muertebr Membro Participativo

    Qual a diferença em usar & ???
  3. kirchner

    kirchner Membro Participativo Moderador

    O & é uma diretiva do pré-processador do compilador.
    Estas diretivas são resolvidas em tempo de compilação, e não em execução. Para alguns casos isso é interessante, por exemplo:

    Código:
    &if dbtype('sports') = 'progress' &then
        /* código de acesso a dados otimizado para Progress */
    &elseif dbtype('sports') = 'mss' &then
        /* código de acesso a dados otimizado para SQL Server */
    &elseif dbtype('sports') = 'oracle' &then
        /* código de acesso a dados otimizado para Oracle */
    &endif.
    No .r final só vai um dos 3 pedaços de código. O compilador calcula a expressão e ignora o resto. É como se não estivesse no fonte.
    Quando o programa for executar o teste &IF não existirá mais.
  4. muertebr

    muertebr Membro Participativo

    hummm bom... acho que entendi...

    perguntei pq vejo muito isso em fontes liberados da totvs e nunca cheguei a usar.
  5. kirchner

    kirchner Membro Participativo Moderador

    Sim, é bem normal nos fontes da TOTVS.

    A vantagem é que tudo que você puder calcular durante a compilação, não precisará ser calculado durante a execução.
    A lógica básica é: vou gastar mais tempo compilando, mas vou executar mais rápido.

    Nem tudo pode ser feito com pré-processador. Qualquer coisa que envolva os dados da tabela não tem chance.
    Isso é bom para programas que rodam em vários ambientes.
    O EMS 2, por exemplo, tem 3 versões ativas (2.02, 2.04 e 2.06B), e 3 tipos de bancos de dados suportados (Pgs, SQL, Oracle).
    Quando é necessário algum tratamento diferenciado para uma versão ou tipo de banco de dados, é utilizado com pré-processador, pois estas informações são conhecidas no momento da compilação...

Compartilhe esta Página